VC++ 2008で別classからFormがincludeできません

このQ&Aのポイント
  • VC++ 2008で別のクラスからFormをincludeする方法を教えてください。
  • Form1.hのincludeができず、コンパイルエラーが発生しています。
  • Visual C++ 2008 Express Editionの環境で問題が発生しています。
回答を見る
  • ベストアンサー

VC++ 2008で別classからFormがincludeできません

お世話になります。 タイトルの通り、別ソースで書いてあるクラスでForm1のincludeができません。includeすれば、そのclassの型が使用できるという認識なのですが、何か他にしなければならない事があるのでしょうか…。 環境はVisual C++ 2008 Express Editionです。 以下、ソースです。 [Form1.h] #pragma once #include "testclass.h" namespace testAppli { (略) private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { testclass *aaa = new testclass(); aaa->testfunc(this); } [testclass.h] #pragma once #include "stdafx.h" #include "Form1.h" class testclass { public: void testfunc(Form1^ aaa); }; [testclass.cpp] #include "stdafx.h" #include "testclass.h" void testclass::testfunc(Form1^ aaa) { return; } 以下のコンパイルエラーが出ています。 1>c:\documents and settings\in flames\my documents\visual studio 2008\projects\testappli\testappli\Form1.h(98) : error C2065: 'testclass' : 定義されていない識別子です。 1>c:\documents and settings\in flames\my documents\visual studio 2008\projects\testappli\testappli\Form1.h(98) : error C2065: 'aaa' : 定義されていない識別子です。 1>c:\documents and settings\in flames\my documents\visual studio 2008\projects\testappli\testappli\Form1.h(98) : error C2061: 構文エラー : 識別子 'testclass' 1>c:\documents and settings\in flames\my documents\visual studio 2008\projects\testappli\testappli\Form1.h(99) : error C2065: 'aaa' : 定義されていない識別子です。 1>c:\documents and settings\in flames\my documents\visual studio 2008\projects\testappli\testappli\Form1.h(99) : error C2227: '->testfunc' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。 1> 型は ''unknown-type'' です。 1>c:\documents and settings\in flames\my documents\visual studio 2008\projects\testappli\testappli\testclass.h(8) : error C2061: 構文エラー : 識別子 'Form1' 1>.\testclass.cpp(4) : error C2065: 'Form1' : 定義されていない識別子です。 1>.\testclass.cpp(4) : error C2065: 'aaa' : 定義されていない識別子です。 1>.\testclass.cpp(5) : error C2448: 'testclass::testfunc' : 関数の定義が間違っています。 1>testAppli.cpp 1>c:\documents and settings\in flames\my documents\visual studio 2008\projects\testappli\testappli\testclass.h(8) : error C2061: 構文エラー : 識別子 'Form1' 1>c:\documents and settings\in flames\my documents\visual studio 2008\projects\testappli\testappli\Form1.h(99) : error C2660: 'testclass::testfunc' : 関数に 1 個の引数を指定できません。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

> 具体的な解決方法をご教授頂きたいのですが 簡単なプロジェクトを起こしました。 参考URL参照。 # すぐに削除します。

参考URL:
http://cid-07c558f8e11e708f.skydrive.live.com/self.aspx/WillBeRemovedSoon/FormSample.zip
Nanzokoree
質問者

お礼

わざわざプロジェクトまで起こして頂き、お手数おかけしました。 頂いたソースから、どうしたらいいかが何となくわかりました。 このような事で数日間悩んでいたので、ありがたい限りです。 では、ありがとうございました!

その他の回答 (1)

回答No.1

[Form1.h] #pragma once #include "testclass.h" [testclass.h] #pragma once #include "stdafx.h" #include "Form1.h" Form1.h と testclass.h とで #include の循環を起こしてますね。

Nanzokoree
質問者

補足

循環参照という問題が起きているのですね。 出来れば、具体的な解決方法をご教授頂きたいのですが、よろしいでしょうか…。

関連するQ&A

  • VC++2010で配列を使用する方法

    String ^test[10]; とすると 1>d:\documents and settings\my documents\visual studio 2010\projects\Form1.h(233): error C2728: 'System::String ^' : ネイティブ配列はこのマネージ型を含むことはできません とエラーが出ます どのようにすれば良いのでしょうか?

  • Visial C++におけるプログラミング

    Visial C++ 2008を使用したプログラミングについてです。 学校の課題をやるためやむなくVisial C++2008を使用していて 学校では実行が出来たのに家では出来ませんでした。 ソースファイルは以下のとおりです。 #include <stdio.h> #include <stdlib.h> #include <time.h> /*構造体宣言*/ struct Students{ int N; int A; int B; int C; }; int main(void){ struct Students std[50]; /*構造体型配列*/ int i,N,A,B,C,num,scannum; srand((unsigned)time(NULL)); /*乱数の初期化*/ FILE *file; /*ファイルのポインタを用意*/ file=fopen("Data.txt","r"); /*Dataファイルの読み込み*/ /*ファイルのオープンチェック*/ if(file==NULL){ fprintf(stderr,"cannnot open file 'Data.txt'\n"); exit(1); } /*Studentsにデータを格納*/ for(i=0;i<=49;i++){ fscanf(file,"%d%d%d",&N,&A,&B); std[i].N=N; std[i].A=A; std[i].B=B; std[i].C=70+(rand()/(RAND_MAX+1.0)*31); /*表示*/ printf("学籍番号:%d.",std[i].N); printf("科目A:%d.\n",std[i].A); printf("科目B:%d.\n",std[i].B); printf("科目C:%d.\n",std[i].C); } fclose(file); return 0; } エラーとしては 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(21) : error C2275: 'FILE' : この型は演算子として使用できません 1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(69) : 'FILE' の宣言を確認してください。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(21) : error C2065: 'file' : 定義されていない識別子です。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(23) : error C2065: 'file' : 定義されていない識別子です。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(23) : warning C4047: '=' : 間接参照のレベルが 'int' と 'FILE *' で異なっています。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(26) : error C2065: 'file' : 定義されていない識別子です。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(26) : warning C4047: '==' : 間接参照のレベルが 'int' と 'void *' で異なっています。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(32) : error C2065: 'file' : 定義されていない識別子です。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(32) : warning C4047: '関数' : 間接参照のレベルが 'FILE *' と 'int' で異なっています。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(32) : warning C4024: 'fscanf' : の型が 1 の仮引数および実引数と異なります。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(36) : warning C4244: '=' : 'double' から 'int' への変換です。データが失われる可能性があります。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(45) : error C2065: 'file' : 定義されていない識別子です。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(45) : warning C4047: '関数' : 間接参照のレベルが 'FILE *' と 'int' で異なっています。 1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(45) : warning C4024: 'fclose' : の型が 1 の仮引数および実引数と異なります。 1>ビルドログは "file://c:\Documents and Settings\devil\My Documents\Visual Studio 2008\Projects\テスト\テスト\Debug\BuildLog.htm" に保存されました。 と表示されます。FILEの宣言をしているのになんで確認してください と出るのでしょうか。。。。解決にご協力お願いします。m(__)m

  • VC++2010で配列に文字列を使用する方法

    array<String^,3>^ myMat = gcnew array<String^,3>(15,97,3338); このようにするとビルド出来るのですが、 array<String^,3>^ myMat = gcnew array<String^,3>("あ","か","さ"); とすると 1>d:\documents and settings\****\my documents\visual studio 2010\projects\****\Form1.h(220): error C2440: '初期化中' : 'const char [3]' から 'int' に変換できません。 1> この変換が可能なコンテキストはありません。 とエラーが出てしまいます どのようにすれば良いのでしょうか?

  • c++によるエラー

    ここ(http://japan.maxim-ic.com/products/ibutton/software/1wire/wirekit.cfm)のサイトの、1-Wire Public Domain Kit + examples + all link files + assembly language files これをDLし、その中にあるThermoを実行したいのですが、エラーが出てしまいます。 ソースファイルに Thermodl.c , Thermoms.c ヘッダーファイルに findtype.h , ownet.h , thermo21.h を入れてあります。 これを実行すると、以下のエラーが出てしまいます。 1>c:\documents and settings\administrator\my documents\visual studio 2010\projects\hiraki\hiraki\thermodl.c(11): error C2143: 構文エラー : ')' が '*' の前にありません。 1>c:\documents and settings\administrator\my documents\visual studio 2010\projects\hiraki\hiraki\thermodl.c(11): error C2143: 構文エラー : '{' が '*' の前にありません。 1>c:\documents and settings\administrator\my documents\visual studio 2010\projects\hiraki\hiraki\thermodl.c(11): error C2059: 構文エラー : '型' 1>c:\documents and settings\administrator\my documents\visual studio 2010\projects\hiraki\hiraki\thermodl.c(11): error C2059: 構文エラー : ')' 1>c:\documents and settings\administrator\my documents\visual studio 2010\projects\hiraki\hiraki\thermodl.c(114): warning C4013: 関数 'PrintResults' は定義されていません。int 型の値を返す外部関数と見なします。 1>c:\documents and settings\administrator\my documents\visual studio 2010\projects\hiraki\hiraki\thermodl.c(145): error C2371: 'PrintResults' : 再定義されています。異なる基本型です。 1> 1>ビルドに失敗しました。 visual studio2010の製品版を使っています。どのように修正すればよいでしょうか。 教えてください。

  • VCでストップウォッチを作りたいのですが、うまくいきません。

    こんにちは。私は30代の男性です。 「Visual C++ の初歩(http://www.gulf.or.jp/~damayan/vc/visualc2.htm)」というサイトで、ストップウォッチプロジェクトファイルがダウンロードできたので、コピペしてコンパイルしようと思ったのですが、うまくいきませんでした。 いつも下記のようなエラーメッセージが表示されます。ヘッダーファイルに「stdafx.h」は置いてあるのですが、やり方が間違っているのでしょうか? ちなみに、ダウンロードした「release」ファイルの中のexeファイルを起動すれば、実行はされます。「自分が新規でプロジェクトファイルを作り、ダウンロードしたソースをコピーしてコンパイルを試みても、うまくいかない。」という話です。 よきアドバイスを頂ければと思います。 宜しくお願い致します。 ----- ビルド開始: プロジェクト: abc, 構成: Debug Win32 ------ コンパイルしています... abc.cpp c:\documents and settings\my documents\visual studio 2005\projects\abc\abc\abc.cpp(111) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? ビルドログは "file://c:\Documents and Settings\My Documents\Visual Studio 2005\Projects\abc\abc\Debug\BuildLog.htm" に保存されました。 abc - エラー 1、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========

  • 本に従ってビルドを進めていったつもりが・・失敗;

    ------ ビルド開始: プロジェクト: D3DFWsamplw, 構成: Debug Win32 ------ コンパイルしています... Renderer.cpp c:\dx90sdk\include\d3d9.h(33) : fatal error C1083: include ファイルを開けません。'objbase.h': No such file or directory Scene.cpp c:\documents and settings\owner\my documents\visual studio 2005\projects\d3dfwsamplw\d3dfwsamplw\scene.cpp(6) : fatal error C1083: include ファイルを開けません。'windows.h': No such file or directory Window.cpp c:\documents and settings\owner\my documents\visual studio 2005\projects\d3dfwsamplw\d3dfwsamplw\window.cpp(8) : fatal error C1083: include ファイルを開けません。'windows.h': No such file or directory コードを生成中... ビルドログは "file://c:\Documents and Settings\Owner\My Documents\Visual Studio 2005\Projects\D3DFWsamplw\D3DFWsamplw\Debug\BuildLog.htm" に保存されました。 D3DFWsamplw - エラー 3、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ========== とでてしまいます、これだけみてなにが悪いのか誰か説明できるひといませんか?初心者なんですいません;

  • DirectX開発中のinclude ファイルを開けません。

    DirectX開発中に c:\documents and settings\a022\my documents\visual studio 2008\projects\map\map\stdafx.h(10) : fatal error C1083: include ファイルを開けません。'WinLib.h': No such file or directory MapModel.cpp 上のソースコードは、 #ifdef _MSC_VER // 警告の抑制 #pragma warning(disable: 4201) #pragma warning(disable: 4100) #pragma warning(disable: 4786) #endif #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x400 #endif #include <WinLib.h> ←ここがよめないらしい というエラーが出ます。 解決法がわかる方はお教えください。

  • DirectXのエフェクトをやりたくて・・・

    VisualStudio2005 ExpressEditionを用いてプログラミングの初歩をやろうとしているんですが・・DirectXSDKをつかったエフェクトを作るときなぜかインクルードファイルとライブラリファイルのところにのところにDirectXSDKのファイルを追加しただけではエラーが出てしまいます。パスもしっかりとしたはずなんですがなんででしょうか?過去ログ見てもわかりませんでした; ------ ビルド開始: プロジェクト: D3DFWsamplw, 構成: Debug Win32 ------ コンパイルしています... Renderer.cpp c:\dx90sdk\include\d3d9.h(33) : fatal error C1083: include ファイルを開けません。'objbase.h': No such file or directory Scene.cpp c:\documents and settings\owner\my documents\visual studio 2005\projects\d3dfwsamplw\d3dfwsamplw\scene.cpp(6) : fatal error C1083: include ファイルを開けません。'windows.h': No such file or directory Window.cpp c:\documents and settings\owner\my documents\visual studio 2005\projects\d3dfwsamplw\d3dfwsamplw\window.cpp(8) : fatal error C1083: include ファイルを開けません。'windows.h': No such file or directory コードを生成中... ビルドログは "file://c:\Documents and Settings\Owner\My Documents\Visual Studio 2005\Projects\D3DFWsamplw\D3DFWsamplw\Debug\BuildLog.htm" に保存されました。 D3DFWsamplw - エラー 3、警告 0

  • エラーがでるようになりました。

    vs2005を使っているんですが、 「c:\documents and settings\rm\my documents\visual studio 2005\projects\o.c\o.c.cpp(17) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか?」 というわけの分からない表示が出ました。 どのプログラムも実行できず、この表示が出ます。 急にそうなったんですが、特別なことをした覚えはありません。

  • 一番上だけ・・・?

    初めて投稿させていただきます。 私は今WEBを見て、DirectXとVisualStudio2005でC++のプログラムを作っています。 ユーザー定義のソースファイルとヘッダーファイル、リソースファイルを使っていて、そのうちヘッダーファイルを「stdafx.h」で参照したのですが、以下のようなエラーが出ました。 (以下プロジェクト名と各種ファイル名は一部仮称です) ------ ビルド開始: プロジェクト: prg, 構成: Debug Win32 ------ コンパイルしています... stdafx.cpp c:\documents and settings\nec-pcuser\my documents\visual studio 2005\projects\prg\prg\stdafx.h(38) : fatal error C1083: include ファイルを開けません。'hdf01.h': No such file or directory prg - エラー 1、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ========== おそらく、以下のところに問題があると思われます。 ----------[SAMPLE CODE]----------(stdafx.h内) // TODO: プログラムに必要な追加ヘッダーをここで参照してください。 #include "hdf01.h" #include "hdf02.h" #include "hdf03.h" #include "hdf04.h" #include "hdf05.h" ----------[SAMPLE CODE]---------- そこで、この掲示板を参考にして次のような方法を取りました。 (1)""を<>に変えてみる (2)[ツール]-[オプション]からインクルードファイルにパス先を登録してみる (3)「"hdfXX.h"」を相対パスにする (4)「"hdfXX.h"」を絶対パスにする 結果は、(1)と(3)は元と同じエラー、(2)と(4)は300以上のエラーが出て、コンパイルが中断されてしまいました。 気になるのは、「"hdf01.h"」と「"hdf02.h"」の位置を入れ替えてみると、「hdf02.h だけを読み込めない」といったエラーが出たことです。 その後もヘッダーファイルを記述する順番を替えてみましたが、どうやら「一番上のヘッダーファイル」だけを読まないらしいです。 実は、WEBで見たプログラムはVC++6.0向けのプログラムで、そのままコピーしてVS2005に貼り付けたところ、 ------ ビルド開始: プロジェクト: SampleSTG, 構成: Debug Win32 ------ コンパイルしています... stdafx.cpp コンパイルしています... ssf01.cpp c:\documents and settings\nec-pcuser\my documents\visual studio 2005\projects\prg\source\ssf.cpp(537) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? ssf02.cpp c:\documents and settings\nec-pcuser\my documents\visual studio 2005\projects\prg\source\ssf02.cpp(54) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? ssf03.cpp c:\documents and settings\nec-pcuser\my documents\visual studio 2005\projects\prg\source\ssf03.cpp(136) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? ssf04.cpp c:\documents and settings\nec-pcuser\my documents\visual studio 2005\projects\prg\source\ssf04.cpp(370) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? コードを生成中... スキップ中... (関連する変更は検出されませんでした) prg.cpp prg - エラー 4、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ========== というエラーが出たため見直してみたところ、stdafx.hに「// TODO: ~ 」といったものを見かけたため、上のように書き加えました。 PSDKやDirectXのパスは通っています。 アプリケーションは「Win32 Application」→「Win32 プロジェクト」と読み替えて、「プロジェクト名を入力して[OK]を押したら、次の画面でいきなり[完了]を押す」と、指示通りに作成しました。 ちなみに、OSは WindowsXP HomeEdition、 VS2005は AcademicEditionです。 よろしくお願いいたします。

専門家に質問してみよう