Eclipse for Android NDK 中的 C++ static const 多重声明错误

标签 c++ eclipse android-ndk-r5 cocos2d-x

我读过类似的问题,但回答我的问题仅适用于 VisualStudio。我正在使用 Eclipse 并使用 Cocos2d-X 开发 Android 应用程序,这是一个使用 Android 的 NDK 的框架。我创建了一个名为 Config 的类,其中包含应用程序的所有常量,例如球大小和 fps。下面是我如何安排代码。

Config.h

#ifndef __CONFIG_H_ // this was auto-generated by eclipse
#define __CONFIG_H_

class Config {
public:
    static const double GRAVITY;
    static const int BALL_WIDTH;
    static const int BALL_HEIGHT;
}

#endif /* config.h */

配置.cpp

#include "Config.h"


const double Config::GRAVITY = 9.8;
const int Config::BALL_WIDTH = 100;
const int Config::BALL_HEIGHT = 100;

它编译没有错误,但是当它开始链接时,我得到以下错误:

multiple definition of `Config::GRAVITY'
C:/workspace/cocos2d-x/SampleGame/android/obj/local/armeabi/objs-debug/game/../../../Classes/Config.o:(.rodata+0xc8): first defined here
C:/workspace/cocos2d-x/SampleGame/android/obj/local/armeabi/objs-debug/game/../../../Classes/Ball.o:(.rodata+0xcc):`

所有声明的常量都会出现前面的错误。我没有在任何报告的源文件的源代码中包含 Config.cpp。

我不知道如何纠正这个问题。我发现了一个非常相似的问题,但答案是针对微软的 VisualStudio 指定的。另外,我很抱歉使用了“cocos2d”标签,即使这适用于 cocos2d-X,但我希望有人知道如何解决这个问题。

最佳答案

如果您在周围包含 .cpp 文件,则可能发生该错误的唯一方法。否则,您的代码完全符合标准。毕竟,该错误暗示该常量是在 Ball.o 中定义的,除非您包含 cpp,否则我认为这不太可能。

关于Eclipse for Android NDK 中的 C++ static const 多重声明错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6136536/

相关文章:

android - 从 native 代码访问 android 外部 SD 卡

android - UnsatisfiedLInkError 使用 NDK 链接到 FFMPEG

c++ - 通过命令行设置SDL2 mac

c++ - 将类型名称传递给模板化运算符

java - 在 64 位 JVM 上运行的 Eclipse 32 位

java - 不能使用 jni 从 eclipse 生成的 dll

android - android : VLD2 非法汇编指令

c++ - 使用 notify_listener - libpqxx

c++ - 如何向列表添加值<shared_ptr<Abstract>>

java - 在远程机器上运行 Eclipse 项目