C++引用类型必须被初始化
我有麻烦具有一定的参考变量的点,第一关断这是我的类C++引用类型必须被初始化
头文件
#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-初始化列表。它用于初始化对象(包括常量和引用)
考虑到复制构造函数和复制赋值运算符被隐式定义为由编译器删除。
令人敬畏的,伟大的工程,但是你能解释为什么我需要使用:在方法的结尾? – Canvas 2014-09-28 20:01:01
@Canvas正如我写的,它是为类的数据成员设置初始值设定项的特殊记录。 – 2014-09-28 20:02:13
您必须在构造函数初始化列表中初始化成员引用,而不是在构造函数体中。 – 2014-09-28 20:04:29