Eclipse中的C ++静态const多重声明错误,适用于Android NDK

问题描述

|| 我读过类似的问题,但是回答我的问题仅适用于VisualStudio。我正在使用Eclipse,并使用Cocos2d-X开发了一个Android应用程序,这是一个使用Android的NDK的框架。我创建了一个名为Config的类,其中包含应用程序的所有常量,例如球形和fps。下面是我如何安排代码配置文件
#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 */
配置文件
#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。 我不知道该如何纠正。我发现了一个非常相似的问题,但是答案是针对Microsoft的VisualStudio的。另外,即使使用cocos2d-X,也很抱歉使用\'cocos2d \'标记,但我希望有人知道如何解决此问题。     

解决方法

可能会发生错误的唯一方法是,如果您周围包含.cpp文件。否则,您的代码完全符合标准。毕竟,错误意味着常量是在
Ball.o
中定义的,除非您包含cpp,否则我发现它不太可能。     ,在您的情况下,名称不匹配。您声明为
gravity
,而在cpp中为
GRAVITY
。 编辑:编辑后,除非您还在
Ball.cpp/h
文件中定义了
GRAVITY
,否则您的代码中看不到链接错误。