使用引用时C++错误

C++ error using references

本文关键字:C++ 错误 引用      更新时间:2023-10-16

我正在做一个项目,这是我第一次使用指针和引用,此时我需要设置对写书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);

如果要分配 ot 稍后更改它,请使用常规对象。确保您有class Author的副本分配器。

private:
Author bookAuthor;
public:
Book::Book(); // Now it's safe to leave it uninitialized