2011-05-26 17 views
1

私は同様の質問を読んだが、私に答えるものはVisualStudioにのみ適用される。私はEclipseを使用しており、AndroidのNDKを使用するフレームワークであるCocos2d-Xを使用してAndroidアプリケーションを開発しています。 Configという名前のクラスを作成しました。このクラスには、ボールのサイズやfpsなどのアプリケーションのすべての定数が含まれています。以下は私がコードをどのように配置したかです。Android用EclipseのC++静的定数複数宣言エラー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):` 

previo私たちのエラーは、宣言されたすべての定数に対して発生します。私は報告されたソースファイルのソースコードにConfig.cppを含めていません。

これを修正する方法はわかりません。私は非常によく似た質問を見つけましたが、その回答はMicrosoftのVisualStudioに指定されました。また、「cocos2d」タグを使用することについて申し訳ありませんが、これがcocos2d-Xに適用される場合でも、誰かがこれを修正する方法を知っていることを期待しています。

+0

複数の定義のようには見えません。それは定義がないように見えます。静的const doubleの代わりにConfig.hで 'static const double gravity = 9.8;'を試してみてください。GRAVITY = 9.8;あるいは '#define GRAVITY gravity'はどこかで行われますか? – Mayank

+0

':: GRAVITY'は' Config :: gravity'と何が関係していますか?これはおそらくあなたの実際のコードではありません... – ildjarn

+0

申し訳ありませんが、私は注意を払っていないので、私はサンプルコードが間違っていたことに気付かなかった。安心して、私の実際のコードはすべての命名規則に準拠しています。私はサンプルを修正し、実際のコードがどのように見えるかを反映します。私は間違った名前を使用していたと思いますが、おそらくコンパイラチェックに合格していないでしょう。 – cesar

答えて

0

あなたの場合、名前が一致しません。 gravityと、cppにはGRAVITYと宣言しています。

編集:あなたはまた、あなたのBall.cpp/hファイルでGRAVITYを定義していない限り、あなたの編集した後、私はあなたのコードにはリンクエラーを表示しません。

+0

宣言されているところでは初期化する必要がありますが、外部で定義する必要があります。 – ildjarn

+0

'static const double gravity = 9.8'はコンパイルされません。 Standardは 'static const int'メンバだけをクラス内で初期化することができます。定義は[あなたがそのメンバを使用する場合にはまだ必要です](http://stackoverflow.com/questions/6106194/definition-of-static-const-outside-the-class-definition/6106240#6106240)。 –

+0

@ildjarn、 "defined"を "initialized"に変更しました。私はそれらを同じ意味で使用しています。その理由は間違いです。 – iammilind

1

エラーが発生する唯一の方法は、.cppファイルを含む場合です。それ以外のコードは完全に標準に準拠しています。結局のところ、このエラーは、定数がBall.oで定義されていることを意味しています。

+0

私はcppファイルを含んでいませんでした。 Config.hヘッダーファイルのみが含まれています。 – cesar

+1

@anonymous: "Ball.cpp"ファイルでは、これらの定数を定義しているというエラーがあります。それを見る。 – Puppy

関連する問題