2012-11-07 147 views
0

我在Visual Studio中使用MFC。 這是函數StartClient,在CPP文件中定義,並在.h文件中聲明爲如何使用C++將函數聲明爲全局函數?

 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 

我要撥打的StartClient()函數在某些其它XYZ .cpp文件。這就是爲什麼我宣佈這個功能是全球性的。但它不起作用。

這給了錯誤:

錯誤LNK2001:無法解析的外部符號 「類CClientSocketDlg __cdecl StartClient(無效)」(?StartClient @@ YA AVCClientSocketDlg @@ XZ)

請指導我解決這個錯誤。由於

+0

你的第一個代碼段是沒有意義的。是.h文件中的類定義中的第一行,而其餘部分來自.cpp文件中的方法定義?如果是這樣,那麼說。 –

+0

你的問題並不是關於聲明一個全局函數,你似乎已經做到了這一點。你得到的錯誤是說你沒有正確定義函數。要定義你的全局函數,在你的cpp文件中寫下這個「CClientSocketDlg StartClient(){...}」。不幸的是,我認爲真正的問題是你的問題是要求你不想要的東西。所以,也許你應該解釋真正的問題是什麼,並尋求解決方案。並且發佈一些更多的代碼,你的代碼看起來相當混亂,但沒有看到真正的代碼,很難提供幫助。 – john

+0

我在問題中增加了一些細節 – Nabeel

回答

2

聲明

extern CClientSocketDlg StartClient(); 

告訴編譯器StartClient是一個獨立的函數,它沒有參數和返回CClientSocketDlg對象的副本。

定義

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

告訴類CClientSocketDlg有一個名爲StartClient的成員函數,它沒有參數和返回bool編譯器。

這兩個不一樣。

在錯誤的情況下,看來你是調用獨立的函數,而不是成員函數,它也不過才宣佈定義(即沒有該功能的實現)。如果你的意思是從類調​​用StartClient你應該在對象聲明一個對象,並調用功能:如果你的意思是叫

CClientSocketDlg dlg; 
dlg.StartClient(); 

的獨立的,你必須實現該功能。

+0

該功能已經實施。我只是想在其他cpp文件中使用該功能 – Nabeel

+0

@Nabeel然後,你不用該文件正確構建。它是否包含在項目中? –

+0

我編輯了這個問題。我希望這是你需要的所有信息 – Nabeel

0

您可以使用範圍解析操作符用於訪問全局函數在C++