无法在c ++中初始化静态向量

时间:2017-05-28 18:43:21

标签: c++ c++11

我想在类中初始化一个向量Stack,如下所示。 该矢量将仅初始化一次,并且不会更新。

#ifndef X_HPP
#define X_HPP

#include <vector>

class Test
{
   public:
      void gen(double x);
      void PopStack();

   private:
         static std::vector<double> Stack;
};

#endif

CPP文件如下:

#include "X.hpp"

int main() {
    std::vector<double> Test::Stack = {1,2,3};
    //{1,2,3} is for representation. In the code, it is generated on the fly and is not a constant seq.
    Test t;
}

使用以下命令编译:

g++ -std=c++11 Y.cpp

报告错误:

Y.cpp: In function ‘int main()’:
Y.cpp:4:37: error: qualified-id in declaration before ‘=’ token
     std::vector<double> Test::Stack = {1,2,3};

2 个答案:

答案 0 :(得分:1)

基本上,你应该移动这条线:

std::vector<double> Test::Stack = {1,2,3};

主函数中的

std::vector<double> Test::Stack = {1,2,3};

int main() {
    // ...
    return 0;
}

如果动态填充向量,则可以将其更改为:

std::vector<double> Test::Stack;

int main() {
    // ...
    return 0;
}

并以某种方式在运行时填充 Stack

答案 1 :(得分:1)

你无法在函数体内初始化静态成员变量(main,在你的情况下)

通常,你将这种代码放在一个和一个cpp文件中,在任何方法的主体之外。 像这样的东西:

std::vector<double> Test::Stack = {1,2,3};
int main() {
    //{1,2,3} is for representation. In the code, it is generated on the fly and is not a constant seq.
    Test t;
}