リスナを実装しようとしています。そのため、多くの相互参照の私は他のクラスと事前定義し、それらをクラスへのポインタを使用するとき、事前定義クラスが機能しない
次のように私のリスナーが見える
の.h
class Book
{
public:
Book();
private:
std::vector<MyListener *> listeners_;
void Notify();
}
た.cpp
Book::Book() {}
void Book::Notify() {
MyListener *p_listener;
for (int i = 0; i < this->listeners_.size(); i++) {
p_listener = listeners_[i];
p_listener->Update(); // ERRORS THROWN HERE WHEN NOT INCLUDING LISTENER.H
}
}
含めないようにしようとしていますこれは、listener.hファイルを含めるとすべて正常に動作します
#include "listener.h"
しかし、私は代わりに、事前に宣言するリスナーは
class Listener;
仕事doesntのそれは私に2つのエラー
C:\CPP\qtTradeSim\qtTradeSim\test\book.cpp:33: error: C2027: use of undefined type 'Listener'
C:\CPP\qtTradeSim\qtTradeSim\test\book.cpp:33: error: C2227: left of '->Update' must point to class/struct/union/generic type
を与えるリスナーヘッダを含めないようにする方法はありますか? class Book
のヘッダファイルで
ヘッダーファイルで前方宣言する必要がありますが、実際には実装ファイルに含める必要があります。 –
@AmiTavory Right。あなたのコメントをソリューションにします。 – Rene
@Reneありがとう。これが重複していたが、見つけられなかったので、答えた。 –