必须初始化C ++引用类型

时间:2014-09-28 19:51:04

标签: c++ sfml

我对某些参考变量有点麻烦,首先是我的班级

标头文件

#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;
}

但是我仍然得到与上面相同的错误,出了什么问题?我知道我可以改变对指针的引用,只是按照这种方式分配它们,但我更喜欢使用引用,因为它们更安全。

1 个答案:

答案 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列表。它用于初始化对象(包括常量和引用)

考虑到复制构造函数和复制赋值运算符被隐式定义为编译器删除。