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

C++ reference type must be initialized

本文关键字:初始化 引用类型 C++      更新时间:2023-10-16

我在一些引用变量方面遇到了一些问题,首先是我的类

头文件

#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初始值设定项列表。它用于初始化对象(包括常量和引用)

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