0

私はform1とform2を持っています。form2 を開くには、ボタン btn をクリックする必要があります。ポインター f2 を使用して form2 へのポインターを指定し、show(this) を使用してそれを開き、パブリック関数 DialogClosed を使用して f2 が nullptr を指すようにします。

Form1.hi には次のものがあります。

#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.hi には次のものがあります。

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 をヘッダー ファイルではなく実装ファイルに記述する必要があるのですか。ヘッダーファイルに定義を書き込もうとしましたが、うまくいきませんでした。あなたの助けが必要です、あなたの意見を教えてください。

4

1 に答える 1

0

通常、ヘッダー ファイルには関数定義が格納されます。次のようなメソッドの実装も格納できます。

inline string method() {
    return something;
}

しかし、あなたはあなたの参照に注意する必要があります. 関数がヘッダーで機能しない最も可能性の高い理由は、必要な Form1.h ヘッダーへの参照がないことです。Form2 cpp ファイルに、Form1.h への参照を含めます。ヘッダーの場合の問題は、すぐに循環依存関係が発生する可能性があることです。Form2.h には Form1.h への参照が必要ですが、Form1.h には Form2.h への参照が必要です。したがって、実装を cpp 領域に配置することで、循環依存関係を心配することなく、必要なすべてのヘッダー参照を提供できます。

于 2013-07-15T14:36:25.077 に答える