【问题标题】:Defining static two-dimensional array as private将静态二维数组定义为私有
【发布时间】:2013-11-07 15:51:43
【问题描述】:

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

它的声明和定义是这样的:

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

在类的私有部分。

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

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

错在哪里?

【问题讨论】:

  • 如果您确实发布了编译器错误,您将更快地获得帮助。

标签: c++ vector multidimensional-array static


【解决方案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));

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      class C {
          static std::vector<std::vector<int>> knowledge;
      };
      
      std::vector<std::vector<int>> C::knowledge( 1, std::vector<int>(1, 0) );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多