2014-03-14 76 views
0

在項目中,我創建了main.cpp和main.h,並定義了公共變量int a和int b中的。 cpp文件。MFC,無對話框類.cpp文件,如何獲取主.cpp公共變量

目前我在aproc.cpp和aproc.h(它不是對話框)中創建一個類Aproc,並使用include aproc.h將其添加到main.cpp中。

現在,在aproc.cpp我想「一」,這是main.h定義的變量,我使用這個代碼:

((MainDlg*)GetParent())->a; 

編譯器效果很好, 但它將運行的getParent時錯誤,

變量聲明爲

public: 
    int a; 

aproc.h被delcared爲

class aproc.h : pulbic CWnd 
{ 

} 

如何獲取公共變量?

+1

顯示更多的代碼並糾正錯別字。 –

+0

它在運行時給出的錯誤是什麼? –

回答

0

您還沒有告訴我們aproc窗口是否是主窗口的子窗口,以及aproc窗口是否已創建,以及您獲得的運行時錯誤。爲了避免這些可能的問題,您可以使用全局MFC函數AfxGetMainWnd()。

((CMainDlg*)AfxGetMainWnd())->a 
0

如果你的程序崩潰的((MainDlg*)GetParent())->a;,則很可能意味着的getParent()返回NULL,表示失敗。在使用GetParent()的結果之前檢查返回值。

MainDlg *p = (MainDlg *)GetParent(); 
if(p == NULL) { 
    int err = GetLastError(); // <--- inspect this return value, it'll tell you why it failed 
} 

的getParent()通常爲失敗的原因如下:

  • 窗口沒有被創建的是,通過直接或間接地調用創建()
  • 該窗口是一個頂不具有WS_POPUP樣式的級別窗口
  • 所有者窗口具有WS_POPUP樣式。

由於您似乎正在使用對話框(您的投影到MainDlg),我懷疑#1適用,並且您在對話框創建/ OnInitDialog之前調用GetParent()。

GetLastError()

GetParent()