Я читал подобные вопросы, но тот, который отвечает мне, относится только к VisualStudio. Я использую Eclipse и разрабатываю приложение для Android с использованием Cocos2d-X, который является базой, использующей NDK для Android. Я создал класс с именем Config, который содержит все константы приложения, такие как размеры шара и fps. Ниже я описал код.C++ static const множественная ошибка объявления в Eclipse для Android NDK
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):`
The previo us error возникает для всех объявленных констант. Я не включил Config.cpp в исходный код любого из исходных файлов.
Я понятия не имею, как исправить это. Я нашел очень похожий вопрос, но ответ был указан в Microsoft VisualStudio. Кроме того, я прошу прощения за использование тега cocos2d, даже если это относится к cocos2d-X, но я надеюсь, что кто-то знает, как это исправить.
Это не похоже на несколько определений. Похоже, нет никакого определения. Попробуйте 'static const double gravity = 9.8;' в Config.h вместо 'static const double GRAVITY = 9.8;' или '#define GRAVITY gravity' где-то делается? – Mayank
Что значит ':: GRAVITY' иметь отношение к' Config :: gravity'? Это не может быть вашим реальным кодом ... – ildjarn
Извините, я не обращал на это внимания, поэтому я не заметил, что мой пример кода был неправильным. Будьте уверены, мой настоящий код соответствует всем соглашениям об именах. Я исправил свои образцы, и они отражают то, как выглядит мой настоящий код. Вероятно, я бы не прошел проверку компилятора, если бы использовал неправильные имена. – cesar