读书人

vc6.0下怎么解决error LNK2001unresol

发布时间: 2012-02-21 16:26:23 作者: rapoo

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的温床,应该尽可能的在构造函数中只作最少的必要操作,另外为这个类设计一个成员初始化函数才是上佳的构造策略!




读书人网 >C++

热点推荐