1

ええと、これは説明するのがちょっと複雑です。次のようなヘッダーを持つ静的ライブラリをコンパイルしています。

class Foo{
    static int Goo(){
        DoSomethingExciting();
        return 0;       
    }
    static int fooMember;
}

Cppには、fooMemberの初期化があります。

int Foo::fooMember = Foo::Goo();

静的ライブラリを私が書いているアプリケーションにリンクするとき、呼び出されるはずのGooメソッドが呼び出されていません。正確には、DoSomethingExciting()メソッドはまったく呼び出されません。私はアプリケーションでFooクラスを使用します。私が線を引くとき:

int Foo::fooMember = Foo::Goo();

私のアプリケーションのCPPでは(もちろん静的ライブラリから同じ行を削除します)、Goo()が呼び出されていることがわかります。

発生している問題に名前を付ける方法がわかりません。グローバル静的メンバーの初期化などの問題だと思います。

RVCTを使用してコンパイルしています。Visual Studioで同じシナリオをコンパイルすると、すべてがうまく機能します。RVCTの動作が異なると推測しているので、コンパイルフラグを追加する必要があるかもしれません。

ところで、コンパイルされた実行可能ファイルで逆コンパイラーを使用しようとしましたが、メソッドがファイルにあることは確認しましたが、Goo()の呼び出しは表示されませんでした。

私は私の問題について十分に明確であったことを願っています:)

前もって感謝します...

4

1 に答える 1

0

静的オブジェクトのコンストラクターである場合は呼び出されますが、静的メソッドにすぎないため、呼び出しが自動的に生成されるのはなぜですか?

于 2011-02-06T15:42:42.517 に答える