我对某些参考变量有点麻烦,首先是我的班级
标头文件
#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;
}
但是我仍然得到与上面相同的错误,出了什么问题?我知道我可以改变对指针的引用,只是按照这种方式分配它们,但我更喜欢使用引用,因为它们更安全。
答案 0 :(得分:3)
按以下方式更改构造函数
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-initializer列表。它用于初始化对象(包括常量和引用)
考虑到复制构造函数和复制赋值运算符被隐式定义为编译器删除。