如何在c ++ 11中初始化一个静态const向量类成员

时间:2012-10-12 09:04:51

标签: c++ class vector c++11 initialization

我需要初始化一个静态const向量类成员... 我试过了

static const vector<string> vr ({"2", "3", "4"});  

static const vector<string> vr = {"2", "3", "4"}; 

static const vector<string> vr {"2", "3", "4"};

他们不工作....

我正在使用eclipse和mingw(我启用了c ++ 11)

3 个答案:

答案 0 :(得分:13)

静态变量初始化在类之外完成,如下所示:

class Example
{
    static const vector<string> vr;
    // ...
};

const vector<string> Example :: vr ({"hello", "world"});

答案 1 :(得分:10)

在类定义中声明静态成员,但在外部定义它们。

class MyClass {
public:
    // declaration
    static const std::vector<std::string> vec;
};

// definition
const std::vector<std::string> MyClass::vec = ...;

此例外是整数类型,

class MyClass {
public:
    // declaration and definition
    static const int MAX_BURRITOS = 5;
};

答案 2 :(得分:1)

您确实将问题限制在C ++ 11,但我将在这里留给以后在搜索结果中找到它的访问者。

如果您可以继续使用 C ++ 17 ,则可以使用const static inline来初始化类声明中的静态成员,而无需再在类声明中使用它。类。

赞:

#include <iostream>
#include <string>
#include <vector>

class Test {
public:
    const static inline std::vector<std::string> Names = { "Fred", "Barney", "Wilma" };
};

int main() {
    std::cout << Test::Names[0];
    return 0;
}