0

我有一个二维向量作为成员变量,并由构造函数初始化它。现在我必须将它声明为静态,我得到错误语法的编译器错误。

它的声明和定义如下:

 std::vector< std::vector<int> > knowledge( 1, std::vector<int>(1, 0) );

在课堂的私人部分。

我在该行得到编译器错误:

expected identifier before numeric constant
expected »,« or »...« before numeric constant

错误在哪里?

4

3 回答 3

1

静态类成员需要在类内部声明,但在外部定义。例子

class C {
    static std::vector<std::vector<int>> knowledge;
};

std::vector<std::vector<int>> C::knowledge( 1, std::vector<int>(1, 0) );
于 2013-11-07T15:59:57.753 回答
1

阅读内容然后执行此操作:

// 
// 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));
于 2013-11-07T16:01:07.957 回答
1

对于使用静态类成员,您必须在类之外定义该成员,因此编译器会将其分配到内存中。

在类外定义了对应的变量后,就可以初始化并使用它了。

于 2013-11-07T15:58:02.160 回答