我在Visual Studio中使用MFC。 这是函数StartClient,在cpp文件中定义,并在.h文件中声明为
protected:
bool StartClient(); // in Client.h file
bool CClientSocketDlg::StartClient() //in Client.cpp file
{
CString strServer;
m_ctlIPAddress.GetWindowText( strServer );
------
-----
return bSuccess;
}
我也声明了这个
extern CClientSocketDlg StartClient(); // in global.h
我想在另一个xyz.cpp文件中调用StartClient()函数。这就是我将此功能宣布为全局的原因。但它不起作用。
这给出了错误:
错误LNK2001:未解析的外部符号“类CClientSocketDlg __cdecl StartClient(void)”(?StartClient @@ YA?AVCClientSocketDlg @@ XZ)
请指导我解决该错误。感谢
答案 0 :(得分:2)
声明
extern CClientSocketDlg StartClient();
告诉编译器StartClient
是一个独立的函数,它不带参数并返回CClientSocketDlg
对象的副本。
定义
bool CClientSocketDlg::StartClient() { ... }
告诉编译器类CClientSocketDlg
有一个名为StartClient
的成员函数,它不带参数并返回bool
。
这两个不一样。
如果出现错误,您似乎正在调用独立函数,而不是成员函数,并且它只是声明而不是已定义(即没有执行该功能)。如果你想从类调用StartClient
,你应该声明一个对象并在对象中调用该函数:
CClientSocketDlg dlg;
dlg.StartClient();
如果你打算打电话给独立,你必须实现这个功能。
答案 1 :(得分:0)
您可以使用范围分辨率运算符来访问C ++中的全局函数