クラス内のベクトル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'のどれでもかまいません。静的メンバーは、すべての関数の外部で初期化され、プログラム全体で1回のみ指定されます。 –
PaulMcKenzie
@ SuJK基本的には、すべての静的メンバーの定義を提供する必要があります(静的定数を持つものもあります)。その代わりに、 'test :: Stack'という名前の自動変数を' main'関数の中で宣言します。これは明らかにあなたがするべきものではありません。 –