我的示例类有一个静态字符数组,我想创建一个从字符到索引的Map。我需要在example.cpp文件的for循环中初始化这个静态Map。然而,C++“需要一个声明”。有什么方法可以将我的Map填充为声明吗?一般来说,在调用类变量的构造函数之前,是否有可能为静态变量创建一个构造函数来处理所有的初始化?
这是我的示例类。
#include <map>
using namespace std;
class Example {
static char chars[4];
static map<char,int> char2idx;
};
char Example::chars[4] = {'a','b','c','d'};
for(int i=0; i<4;i++) {
Example::char2idx[Example::chars[i]] = i;
}
当我试图编译时,我得到了以下错误。
clang++ -std=c++11 -Wall -g -c -o example.o example.cpp
example.cpp:9:1: error: expected unqualified-id
for(int i=0; i<4;i++) {
^
1 error generated.
2条答案
按热度按时间but5z9lq1#
快速修复:创建一个辅助函数
wkftcu5l2#
C++中的ur-example是
std::cin
,std::cout
等的初始化,核心技巧是在全局命名空间中有一个调用静态构造函数的局部静态变量:example.hpp
example.cpp
另一种方法是使用工厂来生成类的示例。第一次生成示例时,初始化静态数据。
最后,你可以在类的构造函数中使用一个静态初始化器,这和第一个方法类似:
我相信还有其他的方法来解决这个问题,但这就是我的想法。
编辑:另一个答案中的例子也很好!