0

こんにちは、私はVisual C ++を初めて使用しますが、C++は使用しません。フォームを表示/非表示にする方法を理解しようとして問題が発生しています。

フォームForm1と別のフォームTestFormがあるとしましょう。Form1.hのボタンクリック機能に次のコードがあります。

Form1::Hide();
TestForm^ form = gcnew TestForm();
form->Show();

そしてそれはうまくいきます。ボタンをクリックすると、Form1が消え、TestFormが表示されます。しかし、TestForm.hで同じことを行うと(表示/非表示に設定されているフォームを変更するだけ)、Form1.h(以前は機能していた)とTestForm.hの両方で多数のコンパイラエラーが発生します。

  Form1.cpp
c:\users\alex\documents\visual studio 2010\projects\test\test\TestForm.h(86): error C2065: 'Form1' : undeclared identifier
c:\users\alex\documents\visual studio 2010\projects\test\test\TestForm.h(86): error C2065: 'form' : undeclared identifier
c:\users\alex\documents\visual studio 2010\projects\test\test\TestForm.h(86): error C2061: syntax error : identifier 'Form1'
c:\users\alex\documents\visual studio 2010\projects\test\test\TestForm.h(87): error C2065: 'form' : undeclared identifier
c:\users\alex\documents\visual studio 2010\projects\test\test\TestForm.h(87): error C2227: left of '->Show' must point to class/struct/union/generic type
          type is ''unknown-type''
  TestForm.cpp
c:\users\alex\documents\visual studio 2010\projects\test\test\Form1.h(103): error C2065: 'TestForm' : undeclared identifier
c:\users\alex\documents\visual studio 2010\projects\test\test\Form1.h(103): error C2065: 'form' : undeclared identifier
c:\users\alex\documents\visual studio 2010\projects\test\test\Form1.h(103): error C2061: syntax error : identifier 'TestForm'
c:\users\alex\documents\visual studio 2010\projects\test\test\Form1.h(104): error C2065: 'form' : undeclared identifier
c:\users\alex\documents\visual studio 2010\projects\test\test\Form1.h(104): error C2227: left of '->Show' must point to class/struct/union/generic type
          type is ''unknown-type''
4

1 に答える 1

2

この問題は、ヘッダーを.cppファイルに含める順序が原因である可能性があります。元のケースでは、Form1.cppで作業していたとき、「TestForm」はForm1.hが含まれる前の既知のタイプでした。ヘッダーファイルを切り替えるとすぐにメソッドが呼び出されますが、これはもう当てはまりません。

イベントハンドラー(ボタンクリック関数)を.cppファイルに移動することをお勧めします。.cppファイルには両方のヘッダーを含めることができ、コンパイラーは、ヘッダーを含める順序に関係なく、フォーム定義とそのメソッドを適切に検出します。

于 2010-06-21T20:58:50.000 に答える