在哪种情况下我们应该只在实现文件中编写函数的定义?

时间:2013-07-15 14:22:07

标签: .net c++-cli header-files formclosing

我有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。我试图在头文件中写入定义,但它没有用。 我需要你的帮助,请给我你的意见。

1 个答案:

答案 0 :(得分:0)

头文件通常存储函数定义。他们还可以存储方法实现,如:

inline string method() {
    return something;
}

但你必须看你的参考资料。您的函数在标题中不起作用的最可能原因是您没有对所需的Form1.h标头的引用。在Form2 cpp文件中,包含对Form1.h的引用。标题的问题是你可以快速获得循环依赖。 Form2.h需要引用Form1.h,但是Form1.h需要引用Form2.h,依此类推。因此,通过将您的实现放在cpp区域中,您可以提供所需的所有头引用,而不必担心循环依赖。