我在做一个项目,这是我第一次使用指针和引用,此时我需要设置对写书的Author
的引用,作为构造函数中的参数。我还想返回对作者的常量引用,使用 getAuthor()
方法。我不明白为什么会出现该错误(注释行)。
书.h
class Book{
private:
std::string bookTitle;
const Author &bookAuthor;
std::string bookLanguage;
public:
Book(std::string _title, const Author &_author, std::string _language);
Book();
~Book();
Author getAuthor();
};
图书.cpp
#include "Book.h"
Book::Book(std::string _title, const Author &_author, std::string _language)
: bookTitle(_title), bookAuthor(_author), bookLanguage(_language){
}
Book::Book(){ // error C2758: 'Book::bookAuthor' : a member of reference
// type must be initialized
}
Book::~Book(){
};
Author Book::getAuthor(){
return bookAuthor;
}
最佳答案
引用本质上是现有对象的别名。它必须在定义时初始化。你不能说“”是你不知道的任何东西的别名。
引用必须初始化并且初始化后不能更改。
在你的情况下,如果你想要一个不分配任何东西的默认构造函数,你最好创建一个表示“未分配”的对象并使用它。
private:
static const Author nullAuthor(a_flag_that_means_unassigned);
public:
Book::Book() : bookAuthor(nullAuthor);
如果你想分配或稍后更改它,请使用常规对象。确保您有一个 class Author
的复制分配器。
private:
Author bookAuthor;
public:
Book::Book(); // Now it's safe to leave it uninitialized
关于使用引用的 C++ 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45505072/