2013-07-15 53 views
0

我有form1和form2。打開form2我們可以點擊按鈕btn。我們使用指針f2指向form2,並且使用show(this)打開它,我們使用公共函數DialogClosed使f2指向nullptr。在哪些情況下,我們只能在實現文件中寫入函數的定義?

在Form1.h 我有:

#include "Form2.h" 
Private: Form2^ f2; 
namespace WinDialog 
{ 
private: System::Void btn_Click(System::Object^ sender, System::EventArgs^e) 
    { 
    if (f2== nullptr) 
     { 
     f2=gcnew Form2(); 
     f2->Show(this); 
     } 
    else 
    f2->Activate(); 
} 

public: void DialogClosed() 
    {   
    f2= nullptr; 
    } 
} 

在Form2.h我有:

private:System::Void Form2_FormClosed(Object^ FormClosedEventArgs^e); 

在Form2.cpp我有:

#include "stdafx.h" 
#include "Form1.h" 
namespace WinDialog 
{ 
    System::Void Form2::Form2_FormClosed(Object^ sender, FormClosedEventArgs^ e) 
    {   
    Form1^ temp = (Form1^)this->Owner; 
    temp->DialogClosed();//hier we call the public function in Form1. 
    } 
} 

我的問題:爲什麼我們會在實現文件中寫入Definiton Form2_FormClosed而不是頭文件。我試圖在頭文件中寫入定義,但它不起作用。 我需要你的幫助,請給我你的意見。

+0

請修復您的標記,您的問題是C++而不是C#。 – Polyfun

回答

0

頭文件通常存儲函數定義。他們也可以存儲方法實現,如:

inline string method() { 
    return something; 
} 

但是你必須看你的參考。您的函數在頭文件中無效的最可能的原因是您沒有對您需要的Form1.h頭文件的引用。在Form2 cpp文件中,包含對Form1.h的引用。標題中的問題是您可能很快產生循環依賴。 Form2.h需要對Form1.h的引用,但Form1.h需要對Form2.h等的引用。所以通過將你的實現放在cpp區域,你可以提供你需要的所有頭文件,而不用擔心循環依賴。

相關問題