【发布时间】:2011-09-02 10:52:21
【问题描述】:
我已经阅读了类似的问题,但回答我的问题仅适用于 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 */
Config.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,但我希望有人知道如何解决这个问题。
【问题讨论】:
-
它看起来不像多个定义。看起来没有定义。在 Config.h 中尝试
static const double gravity = 9.8;而不是static const double GRAVITY = 9.8;或者#define GRAVITY gravity在某处完成? -
::GRAVITY和Config::gravity有什么关系?这不可能是您的实际代码... -
对不起,我没有注意,所以我没有注意到我的示例代码有误。请放心,我的真实代码符合所有命名约定。我更正了我的示例,它们反映了我的真实代码的样子。如果我使用了不正确的名称,我可能不会通过编译器检查。
标签: c++ eclipse android-ndk-r5 cocos2d-x