2017-07-16 9 views
0

この2つのクラスが同じ ".h"ファイルで宣言されている場合、このビットのコードを動作させるにはどうすればよいですか?彼らは別のものにあればそれを働かせるには?宣言されていないクラスのクラスメンバー

簡単な質問ですが、グーグルが私を助けませんでした。

class Container 
{ 
    Piece p; 
public: 
    Container() :p(this) {}; 
}; 

class Piece 
{ 
    Container* cont; 
public: 
    Piece(Container * c) :cont(c) {}; 
}; 

答えて

2

フォワードContainerを宣言して、後でそれを定義:

class Container; 

class Piece 
{ 
    Container* cont; 
public: 
    Piece(Container * c) :cont(c) {}; 
}; 

class Container 
{ 
    Piece p; 
public: 
    Container() :p(this) {}; 
}; 
+0

なぜ私は最初のピースを宣言し、そのコンテナの後にすることはできませんか?宣言の順序に依存しない、それを行う方法はありますか? – Shocky2

+0

@ shocky2 'Piece'は' Container'へのポインタを保持するので、ポインタは不完全な型を持つことが許されますが、 'Container'は' Piece'オブジェクトを持ち、オブジェクトは不完全であることは許されません。不完全な型は、前方宣言された型です。 –

+0

あなたは先に宣言しています。最初にピースを宣言してください... – CIsForCookies

1

前方宣言は、あなたが探しているものです。

class Container; 

class Piece 
{ 
    Container* cont; 
public: 
    Piece(Container * c) :cont(c) {}; 
}; 
class Container 
{ 
    Piece p; 
public: 
    Container() :p(this) {}; 
}; 

詳細については、Googleをご覧ください。下記を参照してください。

When can I use a forward declaration?

+1

ありがとう。それの名前を知らなかった。 – Shocky2

関連する問題