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: 未解決の外部シンボル "class CClientSocketDlg __cdecl StartClient(void)" (?StartClient@@YA?AVCClientSocketDlg@@XZ)

そのエラーを解決するために私を親切に案内してください。ありがとう

4

2 に答える 2

2

宣言

extern CClientSocketDlg StartClient();

StartClient引数を取らず、オブジェクトのコピーを返す独立した関数であることをコンパイラに伝えCClientSocketDlgます。

定義

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

引数を取らず、 を返すCClientSocketDlgという名前のメンバ関数がクラスにあることをコンパイラに伝えます。StartClientbool

この 2 つは同じではありません。

エラーの場合、メンバー関数ではなく、独立した関数を呼び出しているようで、未定義と宣言されているだけです (つまり、その関数の実装はありません) 。クラスからを呼び出す場合は、オブジェクトを宣言し、オブジェクトで関数を呼び出す必要があります。StartClient

CClientSocketDlg dlg;
dlg.StartClient();

フリースタンディングを呼び出す場合は、関数を実装する必要があります。

于 2012-11-07T12:21:22.920 に答える
0

C++ でグローバル関数にアクセスするためにスコープ解決演算子を使用できます

于 2012-11-07T12:22:44.613 に答える