Visual Studio 2013 中的编译器错误 C2758 [重复]

Posted

技术标签:

【中文标题】Visual Studio 2013 中的编译器错误 C2758 [重复]【英文标题】:Compiler Error C2758 in Visual Studio 2013 [duplicate] 【发布时间】:2016-01-13 14:31:46 【问题描述】:

我有这样的台词:

class ModulePeople : public Module 
public:
   std::list<People> & list_people;
   std::list<People>::iterator it;

当我尝试编译时出现此错误:

Compiler Error C2758 
'ModulePeople': a member of reference type must be initialized

此错误出现在这一行例如:

it = list_people.begin();

但我真的不知道如何初始化这种变量,因为我无法将其设置为 NULL。如果有人可以帮助我,将非常感激。

【问题讨论】:

请发布重现您的错误的代码 此行出现此错误例如:it = list_people.begin(); 抱歉,我抄错了。已编辑 你的成员list_people 是一个引用,必须在你的ctor中初始化 我知道,但我不知道如何初始化list_people,因为我不能使用NULL 【参考方案1】:

引用是在某处具有存储空间的现有对象的别名。这意味着引用必须引用(不是双关语)现有对象,它不像指针可以具有 nullptr 的值。

这意味着如果您使用引用作为类定义的成员字段,那么您必须通过此类对象的任何可用构造函数对其进行初始化,例如:

class ModulePeople : public Module 
public:
   std::list<People> & list_people;
   std::list<People>::iterator it;

   ModulePeople(decltype(list_people) list_people) : list_people(list_people)  

如果你真的想让它不指向任何东西,那么可以使用指针来代替,例如std::list&lt;People&gt;*

【讨论】:

感谢您的解释! :D

以上是关于Visual Studio 2013 中的编译器错误 C2758 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2013 中的编译器错误 C2758 [重复]

Matlab 中的 Visual Studio 2012 编译器更新

Visual Studio Express 2013 Web Essentials 中的 SCSS 编译错误

Visual Studio 2013 和 2015 中的 C++ 编译器错误 C2280“试图引用已删除的函数”

面向 XP 的 Visual Studio 2013 的 Visual C++ 编译器标志

Visual Studio 2015/2013安装失败:Microsoft Visual Studio 2015 Shell (Minimum) Interop Assemblies 安装时发生严重错