构造函数中的引用向量:未初始化的引用
Posted
技术标签:
【中文标题】构造函数中的引用向量:未初始化的引用【英文标题】:Vector by referece in constructor: uninitialized reference 【发布时间】:2016-05-01 17:17:06 【问题描述】:使用命名空间的向量是错误的。可能是笔误。请更改如下。 使用 std::vector 我必须遵循代码:
class MyClass
private:
std::vector<float>& myvector;
public:
MyClass(int k,std::vector<float>& vector)
(...)
this->myvector=vector;
(...)
我这样创建一个 MyClass 对象:
(...)
std::vector<float> vector;
vector.reserve(k);
(...)
MyClass A= MyClass(k,vector);
(...)
弹出一个错误,告诉我 MyVector 是一个未初始化的引用。我只希望 MyClass 将一些数据存储在 MyVector 中并返回。我应该改用指针吗?
谢谢
【问题讨论】:
在这段代码中,myvector
根本不是引用。您确定您发布了正确的代码吗?或者你能显示你得到的确切错误吗?
能否请您发布确切的代码,因为这里在 std:vector 也存在语法错误您需要使用constructor initializer list:
MyClass(int k, std::vector<float>& v)
: myvector(v)
(...)
也不要使用类型的名称作为变量/参数的名称。
来自user3159253的精彩解释
类的成员在构造函数体之前初始化。因此,如果 你没有明确地初始化它们,它们是用它们的初始化的 各自的默认构造函数。对于大多数数据类型,这通常是可以的 (虽然他们会被初始化两次,一次默认 构造函数和正文中的第二次),但没有引用 根本没有默认构造函数
【讨论】:
一些解释:类的成员被初始化before构造函数体。因此,如果您不显式初始化它们,它们将使用各自的默认构造函数进行初始化。对于大多数数据类型,这通常是可以的(尽管它们会被初始化两次,一次使用默认构造函数,第二次在正文中),但对于根本没有默认构造函数的引用则不行。以上是关于构造函数中的引用向量:未初始化的引用的主要内容,如果未能解决你的问题,请参考以下文章
kotlin:sceondary构造函数中的“未解析的引用”