我有form1和form2。打开form2我们schould点击按钮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.
}
}
我的问题:为什么我们应该在实现文件中而不是在头文件中编写定义Form2_FormClosed。我试图在头文件中写入定义,但它没有用。 我需要你的帮助,请给我你的意见。
答案 0 :(得分:0)
头文件通常存储函数定义。他们还可以存储方法实现,如:
inline string method() {
return something;
}
但你必须看你的参考资料。您的函数在标题中不起作用的最可能原因是您没有对所需的Form1.h标头的引用。在Form2 cpp文件中,包含对Form1.h的引用。标题的问题是你可以快速获得循环依赖。 Form2.h需要引用Form1.h,但是Form1.h需要引用Form2.h,依此类推。因此,通过将您的实现放在cpp区域中,您可以提供所需的所有头引用,而不必担心循环依赖。