找不到体系结构i386 cpp/mm文件的符号
symbol(s) not found for architecture i386 cpp/mm files
我正在使用Cocos2D,我创建了一个Singleton C++类,它将存储游戏设置信息。这就是我的课的样子:
#include <cstddef>
#ifndef __pyramidofdoom__GameSettings__
#define __pyramidofdoom__GameSettings__
#endif /* defined(__pyramidofdoom__GameSettings__) */
class GameSettings {
private:
static GameSettings* mGameSettings;
GameSettings(){ mGameSettings = this; }
int rowSelected = 0;
public:
GameSettings *getInstance() {
if (mGameSettings == NULL)
mGameSettings = new GameSettings();
return mGameSettings;
};
int getSelectedRow() { return rowSelected; }
void setSelectedRow(int row) { rowSelected = row;}
};
这就是我在cocos2D mm文件中使用它的方式:
GameSettings *gameSettings = gameSettings->getInstance();
if(multi)
gameSettings->setSelectedRow(3);
else
gameSettings->setSelectedRow(1);
看起来很基本,一切都很好。
这是我现在尝试构建时遇到的错误:
Undefined symbols for architecture i386:
"GameSettings::mGameSettings", referenced from:
GameSettings::getInstance() in GameLayer-E06C3150ABD8625A.o
GameSettings::GameSettings() in GameLayer-E06C3150ABD8625A.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我确保cpp/h文件包含在"构建阶段"下的"编译源"中。我还添加了libc++库,看看是否可以修复它。
#import
和使用cpp类的任何标头或实现也必须使用.mm
扩展。
因此,如果你导入GameSettings.h并在GameLayer.m中使用GameSettingscpp类,你必须将其重命名为GameLayer.mm.
您可能更喜欢使用Objective-C类。理想情况下,完全废弃整个单例。例如,对应用程序启动时实例化的设置类的应用程序内委托引用也同样有效。
您已经声明了mGameSettings
,但没有定义它。您需要在源文件中进行定义:
GameSettings* mGameSettings = NULL;
或者,您可以将其设为本地静态变量:
GameSettings *getInstance() {
static GameSettings instance;
return instance;
}
它具有不泄漏内存和线程安全的优点(在一致的C++11编译器中),如果这对你很重要的话。
或者,去掉singleton。它们几乎从来都不是一个好主意(单态有什么不好的?),尤其是在C++中,除了模式中固有的过度耦合和受限的可测试性之外,还会遇到许多生存期问题。
此外,不要为包含保护使用保留名称:在C++标识符中使用下划线的规则是什么?更重要的是,它应该保护整个头部——你的没有任何作用。
相关文章:
- 使用gcc从静态链接的文件中查找可选符号
- 检测 COFF 对象文件中C++内联符号
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- 如何从二进制文件中的给定符号中获取调用程序图
- 如何将 UTF-8 文本从文件转换为某个可以迭代的容器,并检查每个符号是否为C++字母数字?
- CMake 生成的 MSVC 项目找不到符号,即使为其相关 dll 正确生成了 lib 文件也是如此
- 错误:当我从"WinDbg"打开可执行文件时,找不到符号文件。默认导出 ntdll 的符号.dll
- 可以在 cpp 文件中C++定义为特殊符号的变量β
- 尝试将字符串从文件读取到无符号字符向量中
- C++和带有国家符号的文件路径(也许用 UTF8 编码)
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- 生成文件:体系结构x86_64的未定义符号
- 标头保护文件中结构的重复符号
- 使用共享库编译可执行文件时仅链接所需的符号
- C++ - 将任何文件的字节读取到无符号字符数组中
- 体系结构x86_64的未定义符号:c++/ h 文件和 cpp 文件
- c/c 的文件/符号依赖图形可视化
- 计算 c# 中二进制文件符号的频率不起作用,但适用于等效的 c++ 代码
- Visual c++资源文件符号
- 创建一个只包含所有目标文件符号的文件时应该使用什么命令?