1. ホーム
  2. c++

[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の

2022-01-24 17:50:51

質問

同じ.cppファイル内に2つのクラスがあります。

// forward
class B;

class A {       
   void doSomething(B * b) {
      b->add();
   }
};

class B {
   void add() {
      ...
   }
};

フォワードがうまくいかず、コンパイルできません。

こんなエラーが出るんです。

error: member access into incomplete type 'B'
note: forward declaration of 'B'

clangコンパイラ(clang-500.2.79)を使用しています。

複数のファイル(.cppと.hh)を使用せず、1つの.cppだけでコーディングしたいのですが、可能でしょうか?

Aクラスの前にBクラスが書けません。

私の問題を解決する方法をご存知ですか?

解決方法は?

移動 doSomething の定義は、そのクラス宣言の外側で B とし、さらに add にアクセスすることができます。 A によって public -とか friend -をつける。

class B;

class A
{
    void doSomething(B * b);
};

class B
{
public:
    void add() {}
};

void A::doSomething(B * b)
{
    b->add();
}