Почему я не могу создать экземпляр этого глобального как указатель? - PullRequest
0 голосов
/ 04 января 2012

Похоже, мой исходный файл выдает мне ошибку, которую я не совсем понимаю почему я получаю эту ошибку, поскольку она выглядит несколько напрасной. Я также хотел бы понять, что я могу сделать для достижения того же эффекта. Сейчас я опущу детали, но, как показано, я бы хотел, чтобы это был глобальный указатель объекта.

Код

#include "functions.h" 

App::Game* game = new Game;

void display_func() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    game->render_objects();
    glFlush();  
}

void init(int argc, char** argv) {
    glutInit(&argc, argv);
    game->init_window();
    glutDisplayFunc(display_func);
    game->init();
    glutMainLoop();
}

Ошибка компилятора

functions.cpp:3:23: error: expected type-specifier before ‘Game’
functions.cpp:3:23: error: cannot convert ‘int*’ to ‘App::Game*’ in initialization

Я знаю, что не могу инициализировать это в заголовочном файле, так что у меня есть варианты?

1 Ответ

5 голосов
/ 04 января 2012

Вам нужно написать

 App::Game* game = new App::Game;

App::Game вместо Game).


Отредактировано, чтобы добавить: О, яВероятно, следует объяснить сообщения об ошибках, чтобы другие люди получали похожие сообщения по другой причине.Они в основном говорят сами за себя, если у вас есть следующие факты:

  • «Спецификатор типа» - это то, что обозначает тип, например int или char* или stringили std::string;в этом случае необходим спецификатор типа App::Game.
  • "Ошибка: ожидается X до Y " звучит какэто означает, что Y в порядке, пока вы вставляете X перед ним;но на самом деле он ничего не говорит о Y , за исключением, возможно, того, что это не X .«До Y » в основном просто помогает вам определить, где в строке произошла ошибка синтаксического анализа.(Во многих случаях это действительно то, что нужно до Y - например, если X - точка с запятой, то есть большая вероятность, что вы удалили точку с запятой после оператора или объявления -но во многих случаях на самом деле нужно что-то, а не Y . Это имело место здесь.)
  • int упоминается только потому, что компилятор, карабкаясь, придумал тип-specifier в надежде на продолжение разбора, выбирает int по умолчанию.(Если бы вы написали int *game = new;, вы бы не получили это второе сообщение об ошибке.)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...