您好我知道要声明一个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;
感谢您的帮助!
答案 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)。