c ++为什么这个前向声明失败了?

chr*_*ise 0 c++

我有一个类以下.h

class Book; //forward declaration of Book

class Reader
{
public:
    Reader();

    void SetBook( Book ); 

private:

    Book book_; // Error Reader::book_ uses undefined class Book

}
Run Code Online (Sandbox Code Playgroud)

和.cpp包含

#include "book.h"

void Reader::SetBook( Book book ) { this->book_ = book; }
// Error C2440 cannot convert from Book to int
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这个前瞻性声明不起作用.此外,它不会为声明中使用的"Book"类型引发错误

void SetBook (Book )
Run Code Online (Sandbox Code Playgroud)

有什么问题的建议,这里?

piw*_*iwi 6

声明指针或引用时,前向声明就足够了.因为您的成员book_是Book类型,所以编译器Book在处理标头时需要定义.