1

--編集-混乱して申し訳ありませんが、コピーアンドペーストではなく、このコードをすばやく入力したので、実際にはコードで#ifndef A_H#defineA_Hを実行します。以下のコードを変更して、次のことを示しました
-編集の終了-

それぞれが他のクラスのインスタンスへのポインタを含む2つのクラスがありますが、これは私にとって問題を引き起こしています。私のコードは次のようになります

// A.h
#ifndef A_H
#define A_H

class B; // compiler error here

class A
{
  B* foo;
  // other members and functions
};

#endif

// A.cpp
#include "A.h"
#include "B.h"
/*
 declare functions and use methods in both A and B
*/

// B.h
#ifndef B_H
#define B_H

class A;

class B
{
  A** bar;
// other stuff
};

#endif

//B.cpp
#include "A.h"
#include "B.h" 
/*
declare functions and use methods in both A and B
*/

ヘッダーファイルで他のクラスを前方宣言してから、cppファイルに他のファイルをインクルードすると機能すると言われましたが、マークされた行に「'structb'の前方宣言」というエラーが表示されます。

誰かが私が間違っていることを教えてもらえますか?

4

1 に答える 1

3

ヘッダーを1つ含めます。たとえば、ahのbhを前方宣言しないでください。ahbhのBはそのままで構いません。

そうでなければあなたはsthのようになります

class B {};
....
class B;

このようなエラーに対してのみ前処理を行うことは常に賢明です。

于 2012-09-09T18:22:27.740 に答える