Почему глобальная переменная не инициализируется со строкой, что я дал в переменной extern - PullRequest
2 голосов
/ 29 июня 2010
//s_request_view() constructor is declared as below
namespace Identity_VIEW
{
Published_view_identity s_request_view("SAMPLE");
};

//The constructor is called in another source file as below,
bind_view(Identity_VIEW::s_request_view);

Этот же код отлично работает на Windows, но на SBC (PowerPC) s_request_view передается как NULL.

Может кто-нибудь помочь мне выяснить, почему он ведет себя по-другому?

1 Ответ

6 голосов
/ 29 июня 2010

Я думаю, ответ здесь заключается в том, что компилятор не гарантирует порядок инициализации глобальных переменных. Если ваш bind_view вызывается из конструктора другой глобальной переменной - у вас будет плавающая ошибка.

Попробуйте использовать следующий подход:

namespace Identity_VIEW
{
   Published_view_identity & getRequestView()
   {
      static Published_view_identity s_request_view ("Sample");
      return s_request_view;
   }
}

...
bind_view(Identity_VIEW::getRequestView());

Это может помочь определить порядок инициализации глобальных переменных. Тем не менее, это решение не является поточно-ориентированным (если вам не все равно) ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...