質問編集履歴

1 コード追加

torimingo

torimingo score 78

2019/04/07 07:55  投稿

【C++】 メンバ関数の前方宣言
クラスの前方宣言は「class ClassName;」となると思いますが、メンバ関数を前方宣言したい場合は、どのように書けばいいのでしょうか。
ファイルを分割すれば問題ないことではあるのですが、ひとつのファイルに収めたいため、質問させて頂きました。
ファイルを分割すれば問題ないことではあるのですが、ひとつのファイルに収めたいため、質問させて頂きました。
以下にコードを示します。
```C++
#include<vector>
#include<iostream>
using namespace std;
class Body;
class Parent;
class Child;
class Parent
{
public:
   Parent(Body* body) :
       mBody(body)
   {
       mBody->addParent(this);
   }
   void update()
   {
       updateParent();
   }
   virtual void updateParent()
   {
   }
private:
   Body* mBody;
};
class Child : public Parent
{
public:
   Child(Body* body) :
       Parent(body)
   {
   }
   virtual void updateParent() override
   {
       cout << "child" << endl;
   }
};
class Body
{
public:
   void initialize()
   {
       mChild = new Child(this);
   }
   void addParent(Parent* parent)
   {
       mParents.emplace_back(parent);
   }
   void runloop()
   {
       for(Parent* p : mParents){
           p->update();
       }
   }
private:
   Child* mChild;
   vector<Parent*> mParents;
};
int main()
{
   Body body;
   body.initialize();   // オブジェクトの生成
   body.runloop();    // メインループ
   return 0;
};
```
以下のエラーが出力されます。
```
test.cpp:15:8: error: invalid use of incomplete type ‘class Body’
  mBody->addParent(this);
```
ParentクラスからaddParent()が見えないといっている模様です。
  • C++

    7086 questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る