C ++ статическая ошибка множественного объявления const в Eclipse для Android NDK - PullRequest
1 голос
/ 26 мая 2011

Я читал подобные вопросы, но тот, который отвечает на мои, относится только к VisualStudio.Я использую Eclipse и разрабатываю приложение для Android с использованием Cocos2d-X, фреймворка, использующего 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 от Microsoft.Кроме того, я прошу прощения за использование тега «cocos2d», даже если это относится к cocos2d-X, но я надеюсь, что кто-то знает, как это исправить.

Ответы [ 2 ]

1 голос
/ 26 мая 2011

Единственный способ возникновения этой ошибки - если вы включаете файл .cpp.Иначе, ваш код полностью соответствует стандартам.В конце концов, ошибка подразумевает, что константа была определена в Ball.o, что я считаю очень маловероятным, если вы не включили cpp.

0 голосов
/ 26 мая 2011

В вашем случае имена не совпадают.Вы объявляете как gravity, а в cpp это GRAVITY.

Редактировать : После вашего редактирования я не вижу ошибок компоновки в вашем коде, если вы не определили GRAVITY в своемBall.cpp/h файл также.

...