首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

vc6.0下怎么解决error LNK2001unresolved external symbol

2012-02-21 
vc6.0下如何解决error LNK2001unresolved external symbol编译没有错但是链接出现了如下错误,不知如何搞定

vc6.0下如何解决error LNK2001unresolved external symbol
编译没有错
但是链接出现了如下错误,不知如何搞定,希望各位高手给与良策。
ABComms.obj   :   error   LNK2001:   unresolved   external   symbol   "public:   static   struct   CRuntimeClass   const   CCommsProcessor::classCCommsProcessor "   (?classCCommsProcessor@CCommsProcessor@@2UCRuntimeClass@@B)

ABComms.obj   :   error   LNK2001:   unresolved   external   symbol   "public:   virtual   int   __thiscall   CCommsProcessor::StationIsActivated(long) "   (?StationIsActivated@CCommsProcessor@@UAEHJ@Z)

ABComms.obj   :   error   LNK2001:   unresolved   external   symbol   "public:   virtual   void   __thiscall   CCommsProcessor::ActivateStation(long) "   (?ActivateStation@CCommsProcessor@@UAEXJ@Z)

ABComms.obj   :   error   LNK2001:   unresolved   external   symbol   "public:   virtual   __thiscall   CCommsProcessor::~CCommsProcessor(void) "   (??1CCommsProcessor@@UAE@XZ)
ABComms.obj   :   error   LNK2001:   unresolved   external   symbol   "public:   __thiscall   CCommsProcessor::CCommsProcessor(char   const   *,unsigned   long,unsigned   long,unsigned   long,unsigned   long,unsigned   long,int) "   (??0CCommsProcessor@@QAE@PBDKKKKKH@Z)
ABComms.obj   :   error   LNK2001:   unresolved   external   symbol   "private:   static   class   CString   CABCommsProcessor::m_protocolName "   (?m_protocolName@CABCommsProcessor@@0VCString@@A)
ABComms.obj   :   error   LNK2001:   unresolved   external   symbol   "public:   int   __thiscall   CPLCApplication::SendPLCBlock(unsigned   char,unsigned   char,unsigned   short,unsigned   short,unsigned   short,unsigned   short) "   (?SendPLCBlock@CPLCApplication@@QAEHEEGGGG@Z)

[解决办法]
为什么你的CCommsProcessor类的构造函数原型声明是:

CCommsProcessor(LPCTSTR portNameShort,
DWORD baud,
DWORD byteSize,
DWORD parity,
DWORD stopBits,
DWORD rts,
int responseDelay);

而该构造函数的定义却是:

CABCommsProcessor::CABCommsProcessor(LPCTSTR portNameShort,
DWORD baud,
DWORD byteSize,
DWORD parity,
DWORD stopBits,
DWORD rts,
int responseDelay,
BOOL bcc
)
: CCommsProcessor(portNameShort,
19200, //baud,
8,//byteSize,
parity,
ONESTOPBIT, //stopBits,
RTS_CONTROL_ENABLE,//rts,
responseDelay
)
{
//处理代码......
}

错误出在函数的名字 "CABCommsProcessor::CABCommsProcessor(.....) ",这就是产生LINK2001的原因:
CCommsProcessor的构造函数有声明无定义,自然链接器找不到它。

而:

CABCommsProcessor::CABCommsProcessor(....)应该是CABCommsProcessor类的构造函数,但却没有CABCommsProcessor类的声明!

还应注意的是(这是你问题以外的另一个问题):

  你的构造函数的代码太多,说明你在构造函数中有太多的操作,这些都是可能造成构造失败BUG的温床,应该尽可能的在构造函数中只作最少的必要操作,另外为这个类设计一个成员初始化函数才是上佳的构造策略!




热点排行