2

多くのクラスを含むcocos2d-xライブラリを使用するプロジェクトがあります。.hファイルにグローバルベクトルが含まれています。イントロページクラスでプログラムを起動したときに初期化したい。イントロページクラスには、グラフィカルサーフェスとローダーがあります。次に、そのベクトルをメインクラスで使用します。グローバルベクトルのコードは次のようになります。

//globals.h
#ifndef _GLOBAL_H
#define _GLOBAL_H
#include <vector>

vector<int> a;
#endif

イントロページクラスでpush_backを使用しています。externキーワードとstaticキーワードを使用しました。私のプログラムはランタイムリンカーエラーを起こし、あなたのベクターがappDelegateクラス(cocos2dの基本クラス)で宣言されていると言っています。静的キーワードを後ろに置くと、リンカーエラーは発生しませんが、正しく機能しません。
このエラーを修正するにはどうすればよいですか?これ以外のアイデアがある場合は、共有してください。ありがとうございました。

4

2 に答える 2

3

次のようなデザインが必要です。

shared.cpp

vector<int> a;

shared.h

extern vector<int> a;

somewhere.cpp

#include "shared.h"
void code() {
  a.push_back(10);
}

C ++を使用しているので、クラスを名前空間として使用して、グローバル名前空間が乱雑にならないようにすることができます。例:

shared.cpp

vector<int> Common::a;

shared.h

class Common {
  public:
    static vector<int> a;
}

somewhere.cpp

#include "shared.h"
void code() {
  Common::a.push_back(10);
}
于 2013-01-30T16:52:36.063 に答える
2

オブジェクトの宣言は複数ある場合がありますが、定義は1つだけにする必要があります。これを実現するには、を使用externして宣言externをマークし、定義をマークしないようにします。

ヘッダーファイルで、次のようにします。

extern std::vector<int> a;

ソースコードファイルの1つで、次のようにします。

std::vector<int> a;
于 2013-01-30T16:49:34.553 に答える