【问题标题】: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]

标签: c++ vector constructor pass-by-reference


【解决方案1】:

您需要使用constructor initializer list:

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

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

来自user3159253的精彩解释

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

【讨论】:

  • 一些解释:类的成员被初始化before构造函数体。因此,如果您不显式初始化它们,它们将使用各自的默认构造函数进行初始化。对于大多数数据类型,这通常是可以的(尽管它们会被初始化两次,一次使用默认构造函数,第二次在正文中),但对于根本没有默认构造函数的引用则不行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 1970-01-01
  • 1970-01-01
  • 2019-03-04
  • 2014-05-19
  • 1970-01-01
  • 2013-11-03
相关资源
最近更新 更多