构造函数中的引用向量:未初始化的引用

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 也存在语法错误 修正错别字,谢谢。错误信息是:error: uninitialized reference member ‘MyClass::myvector’ [-fpermissive] 【参考方案1】:

您需要使用constructor initializer list:

MyClass(int k, std::vector<float>& v)
    : myvector(v)

    (...)

也不要使用类型的名称作为变量/参数的名称。

来自user3159253的精彩解释

类的成员在构造函数体之前初始化。因此,如果 你没有明确地初始化它们,它们是用它们的初始化的 各自的默认构造函数。对于大多数数据类型,这通常是可以的 (虽然他们会被初始化两次,一次默认 构造函数和正文中的第二次),但没有引用 根本没有默认构造函数

【讨论】:

一些解释:类的成员被初始化before构造函数体。因此,如果您不显式初始化它们,它们将使用各自的默认构造函数进行初始化。对于大多数数据类型,这通常是可以的(尽管它们会被初始化两次,一次使用默认构造函数,第二次在正文中),但对于根本没有默认构造函数的引用则不行。

以上是关于构造函数中的引用向量:未初始化的引用的主要内容,如果未能解决你的问题,请参考以下文章

kotlin:sceondary构造函数中的“未解析的引用”

在构造函数初始化列表中初始化 stringstream 引用成员,没有任何内容

拷贝构造函数调用的三种情况

构造函数中的引用初始化问题

拷贝构造函数

在构造函数中创建的外部向量