2012-01-20 3 views
0

このポストは以前よりはるかに大きくなってしまったので、私はもう一度始めました。アプリケーションは2つの静的変数スコープを持っています

私の問題は、私のC++プロジェクトの一部が自動的に共有ライブラリにコンパイルされているため、残りのコードベースとスタティックスコープを共有しないということです。

私はこれの原因を切り離しましたが、なぜそれが起こるのかまだ分かりません。

私は自分のプロジェクトにサードパーティの共有ライブラリを統合しています。私はプロジェクトにいくつかのクラスも追加する必要があります。

私はライブラリにリンクしてヘッダーのみを含めると、私のプロジェクトはexeファイルを出力し、すべてがpeachyです。

私が追加することを第二:

(CAkFilePackageLowLevelIOBlockingは、私は私のプロジェクトにcppのコードを経由して追加するために必要とされたクラスの1つです)

protected: 
    CAkFilePackageLowLevelIOBlocking m_LowLevelIO; 

私SoundManagerクラスに、そして私が取得、構築だから

1> Generating Code... 
1>  Creating library D:\DustCloud\WorkingCopy\src\VS2010\Debug\GameDbg.lib and object D:\DustCloud\WorkingCopy\src\VS2010\Debug\GameDbg.exp 
1> VS2010.vcxproj -> D:\DustCloud\WorkingCopy\src\VS2010\Debug\GameDbg.exe 

をはるかに簡単な質問を投稿する:私に言って終わりに、この余分なラインは、そのはに.libとの.expファイルを出力します

ライブラリで与えられたタイプのクラスメンバーを追加するだけで、プロジェクトに.libファイルを作成する必要があるのは何ですか?

これは、プラグマのdefや、.libの出力を強制するクラスのどこかに似たようなものでしょうか?私はVS2010を使用し、昔ながらのWin32 C++間違ってツリーを吠えをたくさんした後、アプリケーション

+4

「地図が分割されています」という意味を理解できません。コード内に1つの地図を宣言すると、分割できません。説明するコードを表示できますか? –

+1

私はグローバルとシングルトンが共有ライブラリごとに定義されていることを覚えているようですので、クラスがライブラリに登録されていれば別々のシングルトンになります。 (私には分かりません) – stefaanv

+0

@stefaanv - これはまさに答えです – vines

答えて

0

を構築してい

、私は私の問題は、共有ライブラリまたはスコープとは何の関係もなかったことを発見しました。問題は...未解決の外部

CBaseFactory::map_type* CBaseFactory::map = new map_type() 

は明らかにマップの新しいインスタンスを作成していた避けるために、私はCPPファイルの先頭に置かマップの静的な初期化によって引き起こされた

それがNULLだった場合CBaseFactoryも、最初の使用上の地図をインスタンス化しようとした

static map_type * getMap() { 
    if(!map) 
    { 
     map = new map_type; 
    } 
    return map; 
} 

その意志の前に追加されたものは何でも明らかにここでの問題の工場のcppファイルの先頭に初期化コードが最初に実行を取得doesntの場合で、クリアされる。

なぜなら、このファクトリがComponentBase.hで定義されていて、最初のコードファイルが静的初期化を実行するため、何もクリアされていないという命名規則が完全に一致しているからです。

ComponentAudioを追加すると、ComponentAudioCharacter(両方とも同時にアルファベット順にComponentBaseの前に来る)、マップがオーバーライドされる前にマップに登録されました。

共有ライブラリの出力はこれとはまったく関係がないようです。単に

CBaseFactory::map_type* CBaseFactory::map = CBaseFactory::map; 

doesntのに初期化ラインをchaing

は、マップを変更して、正しくコンパイルするテンプレートを引き起こします。

わかりませんが、うまくいけば、これは誰かを助けます。

関連する問題