конструктор глобального статического члена не вызывается при компиляции с rvct - PullRequest
1 голос
/ 05 февраля 2011

Ну, это довольно сложно объяснить.Я собираю статическую библиотеку с заголовком, который выглядит примерно так:

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 (), хотя я видел, что метод находится в файле.

Я надеюсь, что я достаточно ясно с моей проблемой:)

Заранее спасибо ...

1 Ответ

0 голосов
/ 06 февраля 2011

Он был бы вызван, если бы он был конструктором статического объекта, но, поскольку это всего лишь статический метод, почему вызов к нему генерируется автоматически?

...