0

我在 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)

请指导我解决该错误。谢谢

4

2 回答 2

2

宣言

extern CClientSocketDlg StartClient();

告诉编译器这StartClient是一个不带参数并返回CClientSocketDlg对象副本的独立函数。

定义

bool CClientSocketDlg::StartClient() { ... }

告诉编译器该类CClientSocketDlg有一个名为的成员函数StartClient,它不接受任何参数并返回一个bool.

这两个是不一样的。

如果出现错误,您似乎正在调用独立函数,而不是成员函数,并且它只是被声明为未定义(即没有该函数的实现)。如果你的意思是StartClient中调用,你应该声明一个对象并调用对象中的函数:

CClientSocketDlg dlg;
dlg.StartClient();

如果您要调用独立的,则必须实现该功能。

于 2012-11-07T12:21:22.920 回答
0

您可以使用范围解析运算符访问 C++ 中的全局函数

于 2012-11-07T12:22:44.613 回答