使用引用时C++错误
C++ error using references
我正在做一个项目,这是我第一次使用指针和引用,此时我需要设置对写书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
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 错误:未在此范围内声明'reverse'