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

标签 c++ sfml

<分区>

我在一些引用变量方面遇到了麻烦,首先是我的类(class)

头文件

#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 )

称为内存初始化器列表。用于初始化对象(包括常量和引用)

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

关于C++引用类型必须初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26088985/

相关文章:

c++ - 碳到 cocoa 转换库?

c++ - 写了一些柏林噪音类型的代码,它看起来很 block 状

c++ - 如何在 C++ 中初始化卷积层而不是 prototxt?

c++ - 这个私有(private)变量 "not declared in this scope"怎么样?

c++ - 如何修复 "initial value of reference to non-const must be an lvalue?"

python - 无法从 Cython 重定向错误流

shader - SFML 着色器制服 : passing my own class

c++ - 尽管有静态链接,Opencv 3.2.0 .dll 仍然丢失

c++ - 使用 C++ 使用 Z3 定义集合论

c++ - 静态与新建/Malloc