如何使用C ++将函数声明为全局?

时间:2012-11-07 12:17:15

标签: c++ visual-studio-2010 mfc

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

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

2 个答案:

答案 0 :(得分:2)

声明

extern CClientSocketDlg StartClient();

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

定义

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

告诉编译器类CClientSocketDlg有一个名为StartClient的成员函数,它不带参数并返回bool

这两个不一样。

如果出现错误,您似乎正在调用独立函数,而不是成员函数,并且它只是声明而不是已定义(即没有执行该功能)。如果你想从调用StartClient,你应该声明一个对象并在对象中调用该函数:

CClientSocketDlg dlg;
dlg.StartClient();

如果你打算打电话给独立,你必须实现这个功能。

答案 1 :(得分:0)

您可以使用范围分辨率运算符来访问C ++中的全局函数