Android NDK版Eclipse中的C++静态常量多重声明错误
C++ static const multiple declaration error in Eclipse for Android NDK
我读过类似的问题,但回答我的问题只适用于VisualStudio。我正在使用Eclipse,并使用Cocos2d-X开发一个Android应用程序,这是一个使用Android NDK的框架。我创建了一个名为Config的类,其中包含应用程序的所有常量,如球大小和fps。下面是我如何安排代码的。
配置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,否则我认为这是不可能的。
在您的案例中,名称不匹配。您正在声明为gravity
,而在cpp中它是GRAVITY
。
编辑:编辑后,除非您在Ball.cpp/h
文件中也定义了GRAVITY
,否则我不会在代码中看到链接错误。
相关文章:
- 是否可以同时声明一个类成员的常量/非常量?
- 在声明中合并两个常量"std::set"(不是在运行时)
- C++:具有内部链接的正向声明常量
- 为什么不能用常量表达式声明数组?
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- 关于静态常量数据模因的声明和定义的混淆
- public:静态常量字符串声明/初始化问题
- 为什么MSVC14允许声明指向动态未初始化常量对象的指针
- 有没有办法声明一个公共静态常量,该常量将使用 constexpr 在源文件中定义(有什么区别)?
- C++ 多态性:如果派生类中的虚函数在基类中声明了常量,是否需要将其声明为常量
- C++ 声明常量变量,但推迟其初始化?
- 使用常量变量作为维度将矩阵声明为类成员时出现编译器错误
- 静态常量声明,变量的constexpr定义,有效的c ++?
- 非整数常量声明 - dev-error:在此范围内未声明"type"
- 如何使用 z3 c++ API 将常量声明为非重复常量
- 用常量字符串和字符串常量声明字符串有什么区别
- Cuda:将设备常量声明为模板
- 使用符号常量声明数组时出现问题
- 常量声明-语言差异
- 对于c++中大量的私有类常量声明,任何不从另一个文件#include的理由