gpt4 book ai didi

c++ - 无法在类中初始化静态映射

转载 作者:行者123 更新时间:2023-12-01 19:15:02 24 4
gpt4 key购买 nike

我正在尝试初始化
的静态 map map<string, int>
在我的程序中如下:

testApp.h

class testApp(){
public:
void setup();
void update();
void renew();
static map<string, int> _someMap;
};

testApp.cpp

testApp::setup(){
_someMap["something"] = 1;
_someMap["something2"] = 2;
cout<<_someMap["something"]<<"\n";
}

我不想使用boost对于 map 的简短使用,并为我的代码添加源依赖项。我不在 C++11我的程序中没有构造函数,因为该类是某个框架的类。我在 Xcode 上并在 .cpp 中执行上述操作,我收到以下错误:

Undefined symbols for architecture i386:
"testApp::mapppp", referenced from:
testApp::setup() in testApp.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

-->此外,假设我的 map 是私有(private)的,为此我尝试在类里面执行此操作:

...
private:
static someVariable;
static void someFunction();

.cpp

testApp::setup(){
someFunction();
}

错误:

Undefined symbols for architecture i386:
"testApp::_someMap", referenced from:
testApp::someFunction() in testApp.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

最佳答案

您已在类定义中声明了该变量,但看起来您尚未定义它。每个静态变量都需要在一个翻译单元中定义。因此,将定义添加到您的源文件中:

map<string, int> testMap::_someMap;

如果您愿意(并且无法使用 C++11 初始化程序),您可以通过从函数结果初始化映射来避免调用 setup 函数:

map<string, int> make_map() {
map<string, int> map;
map["something"] = 1;
map["something2"] = 2;
return map;
}

map<string, int> testMap::_someMap = make_map();

关于c++ - 无法在类中初始化静态映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16838984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com