Так что я пишу программу, которая имеет большой класс, называемый oglapp, и целую кучу других классов, использующих его. Я хочу достичь супер-глобального oglapp * во всех моих .cpps. Мой подход заключается в объявлении oglapp * в main.cpp, который имеет точку входа (которая устанавливает указатель и запускает класс), и у меня есть ссылка extern в конце файла заголовка oglapp. Теоретически, если я использую класс oglapp в любом месте моего проекта, мне нужно включить заголовок для него, который включает в себя extern, и я хорош. Это то, что у меня есть:C++ extern pointer
//main.cpp
oglapp* app;
entrypoint(){app=new oglapp(); app->run();}
//oglapp.h
class oglapp { ... }; extern oglapp* app;
//classX.h
#include "oglapp.h"
classX { ... };
//classX.cpp
#include "classX.h"
void classX::somefunction(){app->dosomething();}
То, что я получаю, является большой ошибкой нулевой ссылки. Я попытался включить заголовок oglapp из .cpp класса X, также попытался поместить приложение exgl oglapp *; для каждого из классов в отдельности я пробовал все, что мог придумать. Кроме того, как ни странно, я не получаю нулевые ссылочные ошибки во всех классах. Некоторые из них могут использовать приложение без проблем, некоторые из них видят его как нулевой указатель. Мне еще предстоит выяснить, что определяет, работает оно или нет.
Что я делаю неправильно? Кроме того, если невозможно объявить один суперглобальный указатель на класс таким образом, как мне это сделать?
не существует гарантии, что ваша функция точки входа вызывается в точке, где выполняется некоторый код в ваших файлах классов. Все эти материалы extern действительно не нужны зло –
C++ не имеет «нулевых опорных ошибок». Вы уверены, что не пытаетесь запустить это на Java? : P –
null ссылка или null указатель кто заботится об этом. –