📄 subject_61114.htm
字号:
<p>
序号:61114 发表者:syncmaster 发表日期:2003-11-17 21:26:18
<br>主题:这是个问题吗?
<br>内容:我自己定义了头文件,出现了link 的错误,说我头文件里面定义的类的一些成员函数已经包含在*.obj文件中,什么重复定义之类的<BR>我要真理!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:凯凯 回复日期:2003-11-17 21:30:54
<br>内容:先rebuild all试试。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:redleaf 回复日期:2003-11-17 21:34:18
<br>内容:在你的头文件中加入<BR>#pragma once
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:syncmaster 回复日期:2003-11-17 21:38:49
<br>内容:RWExcelDlg.obj : error LNK2005: "public: __thiscall CExcel::CExcel(class CString)" (??0CExcel@@QAE@VCString@@@Z) already defined in RWExcel.obj<BR>RWExcelDlg.obj : error LNK2005: "public: class CString __thiscall CExcel::GetExcelDriver(void)" (?GetExcelDriver@CExcel@@QAE?AVCString@@XZ) already defined in RWExcel.obj<BR>RWExcelDlg.obj : error LNK2005: "public: void __thiscall CExcel::Inquire(class CString)" (?Inquire@CExcel@@QAEXVCString@@@Z) already defined in RWExcel.obj<BR>RWExcelDlg.obj : error LNK2005: "public: void __thiscall CExcel::Display(class CListCtrl *)" (?Display@CExcel@@QAEXPAVCListCtrl@@@Z) already defined in RWExcel.obj<BR>RWExcelDlg.obj : error LNK2005: "public: __thiscall CExcel::~CExcel(void)" (??1CExcel@@QAE@XZ) already defined in RWExcel.obj<BR>RWExcelDlg.obj : error LNK2005: "public: void __thiscall CExcel::Create(class CString)" (?Create@CExcel@@QAEXVCString@@@Z) already defined in RWExcel.obj<BR>Debug/RWExcel.exe : fatal error LNK1169: one or more multiply defined symbols found<BR>Error executing link.exe.<BR><BR>RWExcel.exe - 7 error(s), 0 warning(s)<BR>还是这些,到底编写一个头文件需要什么限制<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:syncmaster 回复日期:2003-11-17 21:40:39
<br>内容:另外我的头文件的格式如下:<BR><BR>#ifndef EXCEL_H<BR>#define EXCEL_H<BR>#pragma once<BR>//<BR>class aa<BR>{<BR> .....<BR>};<BR>///类中的函数定义<BR>...<BR>...<BR>..<BR>#endif<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:syncmaster 回复日期:2003-11-17 21:44:23
<br>内容:解决了,是因为重复包含的缘故,后来,我把需要包含头文件的地方用<BR>class aa;代替,就好了<BR>谢谢大家
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:syncmaster 回复日期:2003-11-17 21:49:16
<br>内容:接着问:<BR>我创建一个CRecordset对象:CRecordset set;<BR>接着创建一个CDatabase对象 data;<BR>......<BR>我想把set和data关联起来,但是这个时候非要出现一个对话框选择数据库<BR>怎么样用程序方法把他们连起来,而不是需要从对话框中选择<BR>(我知道可以用CRecordset set(&data))<BR>可是,set是我的一个类的成员变量,不能这样声明定义<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:wjb 回复日期:2003-11-17 22:02:00
<br>内容:CDatabase data;<BR>//data的open处理<BR><BR>CRecordset rs;<BR>rs.m_pDatabase=&data;<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:syncmaster 回复日期:2003-11-17 22:07:53
<br>内容:我是这样做的,可是不行,对了,刚才那个头文件又出问题了<BR>a.h, b.h , b.cpp<BR>我在b.h中定义了a.h声明的类 a m_a;<BR>所以我需要在a.h中加入#include "a.h"<BR>同时b.cpp中肯定是有#include "b.h"的,所以这个时候又出现了重复定义的错误,怎么回事呀
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:syncmaster 回复日期:2003-11-17 22:09:32
<br>内容:对了,说一句题外话,我都想拜wjb为师了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:wjb 回复日期:2003-11-17 22:14:30
<br>内容:rs.m_pDatabase=&data;<BR>这样设置是没有问题的。俺试验过了。<BR><BR>不行,是否仍然出现对话框?<BR>如果是,那是给的参数不够,需要你在对话框中输入。<BR>给一个完整的例子:<BR><BR> CDatabase db;<BR> CString dsn="ODBC;Driver=SQL Server;Server=192.166.3.9;DATABASE=sode_bj;UID=sa;PWD=mapper";<BR> if(!db.Open(NULL,FALSE,FALSE,dsn))<BR> {<BR> AfxMessageBox("FALSE");<BR> return;<BR> }<BR> else<BR> {<BR> AfxMessageBox("SUCCESSED");<BR> } <BR><BR> CRecordset rs;<BR> rs.m_pDatabase=&db;<BR><BR> rs.Open(CRecordset::forwardOnly,"select * from sode_memo");<BR> CString s;<BR> short i;<BR> i=0;<BR> CDBVariant dbValue;<BR><BR> rs.GetFieldValue("stacode",dbValue);<BR> s=*dbValue.m_pstring;<BR><BR> AfxMessageBox(s);<BR><BR> rs.GetFieldValue("datacode",dbValue);<BR> s=*dbValue.m_pstring;<BR><BR> AfxMessageBox(s);<BR><BR> rs.GetFieldValue("memo",dbValue);<BR> s=*dbValue.m_pstring;<BR><BR> AfxMessageBox(s);
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:syncmaster 回复日期:2003-11-17 22:23:34
<br>内容:还是不行,我的代码在下面<BR>CExcel::CExcel(CString excelFilePath)<BR>{ m_excelFilePath=excelFilePath;<BR> <BR> //检查有没有Excel的驱动<BR> CString sSql;<BR> m_sDriver = GetExcelDriver();<BR> if (m_sDriver.IsEmpty())<BR> {<BR> // 没有发现Excel驱动<BR> AfxMessageBox("没有安装Excel驱动!");<BR> return;<BR> }<BR> //初始化m_sDsn<BR> m_sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s", m_sDriver, &excelFilePath);<BR> TRY<BR> {<BR> // 打开数据库(既Excel文件)<BR> sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",m_sDriver, m_excelFilePath, m_excelFilePath);<BR> <BR> m_database.OpenEx(sSql,CDatabase::noOdbcDialog);<BR> <BR> m_recset.m_pDatabase=&m_database;<BR> <BR> <BR> }<BR> CATCH(CDBException, e)<BR> {<BR> // 数据库操作产生异常时...<BR> AfxMessageBox("数据库错误: " + e->m_strError);<BR> }<BR> END_CATCH;<BR> <BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:syncmaster 回复日期:2003-11-17 22:27:55
<br>内容:奇怪,重新编译了一下,又好了,不好意思,对了,那个头文件的问题到底怎么解决呢<BR>a.h, b.h , b.cpp<BR>我在b.h中定义了a.h声明的类 a m_a;<BR>所以我需要在a.h中加入#include "a.h"<BR>同时b.cpp中肯定是有#include "b.h"的,所以这个时候又出现了重复定义的错误,怎么回事呀
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:wjb 回复日期:2003-11-17 22:30:53
<br>内容:能否把工程文件传上来。<BR>靠猜测可能很难解决。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:syncmaster 回复日期:2003-11-17 22:37:10
<br>内容:程序代码来了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:syncmaster 回复日期:2003-11-17 22:42:00
<br>内容:来了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:wjb 回复日期:2003-11-18 08:54:38
<br>内容:问题出在excel.h上。<BR>按照vc的标准重新建立了这个类。文件名excel1.h/cpp<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:syncmaster 回复日期:2003-11-18 12:08:40
<br>内容:vc的这方面的标准在哪里可以找到,我想知道究竟是怎么回事
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:wjb 回复日期:2003-11-18 12:48:03
<br>内容:误会<BR>俺说的是标准的方法<BR><BR>实际上是有很多的宏控制命令写的不标准,vc处理不好<BR><BR>如果建立自己的类,最好使用vc生成框架,可以避免麻烦<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -