如何在hpp中声明一个向量?

时间:2017-04-22 23:25:40

标签: c++ c++11 vector c++14

您好我知道要声明一个std::vector我必须这样做

std::vector<double> a(0);

但是在我的文件中它不起作用。这是我的代码:

main.cpp:

#include "test.hpp"

int main()
{
    Test test;
    return EXIT_SUCCESS;
}

test.hpp:

#ifndef DEF_TEST
#define DEF_TEST

#include <iostream>
#include <vector>

class Test
{
public:
    Test();
private:
    std::vector<double> a(0);
};

#endif

这是test.cpp:

#include "test.hpp"

Test::Test()
{
    a.push_back(2.3);
    std::cout << a[0] << std::endl;
}

编译告诉我:

In file included from main.cpp:1:0:
test.hpp:11:23: error: expected identifier before numeric constant
 std::vector<double> a(0);
                       ^
test.hpp:11:23: error: expected ‘,’ or ‘...’ before numeric constant
In file included from test.cpp:1:0:
test.hpp:11:23: error: expected identifier before numeric constant
 std::vector<double> a(0);
                       ^
test.hpp:11:23: error: expected ‘,’ or ‘...’ before numeric constant
test.cpp: In constructor ‘Test::Test()’:
test.cpp:5:1: error: ‘((Test*)this)->Test::a’ does not have class type
 a.push_back(2.3);
 ^
test.cpp:6:17: error: invalid types ‘<unresolved overloaded function type>[int]’ for array subscript
 std::cout << a[0] << std::endl;

感谢您的帮助!

5 个答案:

答案 0 :(得分:4)

在我看来,你不能将构造函数用于类的成员声明;要在类的向量中使用构造函数,必须在类的构造函数中指定它,例如

class Test {
private:
    vector<double> a;
public:
    Test() : a(0) {;}
};

答案 1 :(得分:3)

您可以使用以下语法初始化变量:

std::vector<double> a(0);

但是你不能将它用于类成员的类内初始化。要初始化类中的成员,可以使用以下语法:

std::vector<double> a = {};

答案 2 :(得分:2)

一旦创建了一个类的实例,

std :: vector成员将被默认的初始化程序初始化。

如果要显式调用向量初始化程序,可以在Test.cpp文件中以这种方式执行:

Test::Test():
a(0) {
    //...
}

聚苯乙烯。这样做的一个优点是您还可以初始化属于您的类成员的常量。

答案 3 :(得分:1)

您必须执行以下操作以将向量初始化为类成员:

class Test{
public:
    Test();
private:
    std::vector<double> a = std::vector<double>(0);
};

仅供参考,此代码将矢量调整为0,这是多余的。您可以简单地编写std::vector<double> a,其大小将为0。在其他情况下,如果您希望向量的大小为n,那么您使用我用n而不是0编写的方法。

答案 4 :(得分:0)

您可以在构造函数

之后使用初始化列表
Test::Test() : a(0)
{
  ...
}

您需要从.hpp文件中删除(0)。