0
我想初始化一個類中的矢量Stack
,如下所示。 該矢量將僅初始化一次,不會更新。無法在C++中初始化靜態矢量
#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};
好的,這解決了錯誤。但是,你能詳細說明它爲什麼現在起作用嗎? –
@SuJK自從C++已經存在以來,靜態成員需要被初始化。不管它是'int','double'還是'std :: vector'。靜態成員在所有函數之外初始化,並且在整個程序中只指定一次。 –
PaulMcKenzie
@SuJK基本上,你必須爲所有靜態成員提供一個定義(儘管有一些靜態常量)。代替它,你在'main'函數內聲明瞭一個名爲'Test :: Stack'的自動變量,這顯然不是你應該做的事情。 –