我有一个二维向量作为成员变量,并由构造函数初始化它。 既然我必须将它声明为静态,我会因错误的语法而遇到编译器错误。
声明并定义为:
std::vector< std::vector<int> > knowledge( 1, std::vector<int>(1, 0) );
在班级的私人部分。
我在那一行得到了编译器错误:
expected identifier before numeric constant
expected »,« or »...« before numeric constant
错误在哪里?
答案 0 :(得分:1)
对于使用静态类成员,您必须在类外部定义此成员,因此编译器将在内存中分配它。
在类外定义相应的变量后,可以初始化并使用它。
答案 1 :(得分:1)
静态类成员需要在类中声明,但在外部定义。实施例
class C {
static std::vector<std::vector<int>> knowledge;
};
std::vector<std::vector<int>> C::knowledge( 1, std::vector<int>(1, 0) );
答案 2 :(得分:1)
阅读this然后执行此操作:
//
// In Foo.h...
//
#include <vector>
class Foo {
// ...
private:
static std::vector< std::vector<int> > knowledge ;
} ;
//
// In Foo.cpp...
//
std::vector< std::vector<int> > Foo::knowledge(1, std::vector<int>(1, 0));