21

我需要初始化一个作为类成员的静态常量向量。

我努力了:

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)

4

3 回答 3

17

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

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

const vector<string> Example :: vr ({"hello", "world"});
于 2012-10-12T09:28:45.940 回答
13

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

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;
};
于 2012-10-12T09:27:34.217 回答
5

您确实将您的问题限制在 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;
}
于 2020-05-20T14:58:43.417 回答