C++引用类型必须初始化
C++ reference type must be initialized
我在一些引用变量方面遇到了一些问题,首先是我的类
头文件
#pragma once
#include "ImageLoader.h"
#include "FontLoader.h"
class LevelState
{
public:
LevelState()
private:
ImageLoader& _imageLoader;
FontLoader& _fontLoader;
}
类文件
#include "LevelState.h"
LevelState::LevelState()
{
}
现在,当我去构建时,我会得到这些错误
Error 2 error C2758: 'LevelState::_fontLoader' : a member of reference type must be initialized
Error 1 error C2758: 'LevelState::_imageLoader' : a member of reference type must be initialized
因此,我继续更新我的构造函数,以接收类似的ImageLoader和FontLoader
LevelState::LevelState(FontLoader& fontLoader, ImageLoader& imageLoader)
{
_fontLoader = fontLoader;
_imageLoader = imageLoader;
}
但我仍然得到了和上面一样的错误,出了什么问题?我知道我可以将引用更改为指针,并以这种方式分配它们,但我更喜欢使用引用,因为这些引用更安全。
以以下方式更改构造函数
LevelState::LevelState(FontLoader& fontLoader, ImageLoader& imageLoader)
: _fontLoader( fontLoader ), _imageLoader( imageLoader )
{
}
在您的构造函数中
LevelState::LevelState(FontLoader& fontLoader, ImageLoader& imageLoader)
{
_fontLoader = fontLoader;
_imageLoader = imageLoader;
}
引用未初始化。有些已使用的赋值语句试图将值分配给必须由引用引用的对象。
此记录
_fontLoader( fontLoader ), _imageLoader( imageLoader )
称为mem初始值设定项列表。它用于初始化对象(包括常量和引用)
请考虑复制构造函数和复制赋值运算符被编译器隐式定义为已删除。
相关文章:
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 从 BubbleSort* 类型的右值初始化 'AssortedSorter&' 类型的非常量引用无效"
- 通过 C++ 中的重载构造函数初始化未知类型的变量
- C++在构造函数处用表达式初始化引用
- 无法使用 'const Node *' 类型的右值初始化 'Node *' 类型的变量
- 我可以从取消引用"new"的返回值初始化引用吗
- 通过用户定义的转换初始化引用
- 为什么我可以在初始化引用后重新绑定引用?
- TBB 编译器错误 -"my_task":必须初始化引用
- 初始化一个类型向量的巨大向量<int>
- Visual Studio 2017 允许在构造函数中使用自身初始化引用成员.真的是合法的C++吗?
- 智能感知:不能使用 "PVOID" 类型的值初始化 "_NtQuerySystemInformation" 类型的实体
- C++:无法使用条件类型在模板函数中使用 'double' 类型的 lvalue 初始化 'char*' 类型的参数
- 为构造函数初始化引用实例变量提供默认值
- C++用值初始化聚合类型的std::数组
- 克里昂未初始化记录类型:播放器
- 初始化结构类型的静态变量
- 如何修复"无法使用类型为 value_type(又名派生*)的左值初始化 Base* 类型的返回对象?
- 从 int 类型的右值初始化 &分数类型的非常量引用无效?
- 从类型的临时类型初始化对类型的非const引用无效