Форум программистов, компьютерный форум CyberForum.ru

не компилируется - C++

Восстановить пароль Регистрация
 
HardMorg
2 / 25 / 3
Регистрация: 29.08.2010
Сообщений: 204
16.03.2012, 20:13     не компилируется #1
Вот кусок кода

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
class Game;
 
class View {
 
private:
    static int left;
    static int right;
    static int position_x;
    static int position_y;
    static int *argc;
    static char **argv;
    static int bottom;
    static int top;
    static int windowSize;
 
public:
 
    View() { 
    }
 
    static void create_window() {
 
        glutInit(View::argc, View::argv);
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
        glutInitWindowSize(View::windowSize, View::windowSize);
        glutInitWindowPosition(View::position_x, View::position_y);
        glutCreateWindow("Snake");
        glClearColor(0, 0, 0, 1);
 
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        
        glOrtho(View::left, View::right, View::bottom , View::top, 0, 10);
 
        glutDisplayFunc(Game::game);
 
        glutMainLoop();
    
    }
    void draw() {
 
    }
 
    static int const& getLeft() {
        return left;
    }
     
    static int const& getRight()  {
        return right;
    }
 
    static void setArgc(int *ptr) {
        argc = ptr;
    }
    static void setArgv(char **a) {
        argv = a;
    }
};
 
class Game {
 
private:
    View *interface;
    Data *data;
public:
    Game() {
 
        interface = new View();
    }
    void startGame() {
 
        View::create_window();
 
    }
 
    static void game() {
 
        glClear(GL_COLOR_BUFFER_BIT);
        glBegin(GL_LINE_LOOP);
 
 
        glEnd();
 
        glutSwapBuffers();
 
    }
};
только я не пойму почему он не компилируется

c:\users\morg\documents\visual studio 2010\projects\opengl\snake\snake\main.cpp(219): error C2027: использование неопределенного типа "Game"
1> c:\users\morg\documents\visual studio 2010\projects\opengl\snake\snake\main.cpp(157): см. объявление "Game"
1>c:\users\morg\documents\visual studio 2010\projects\opengl\snake\snake\main.cpp(219): error C2065: game: необъявленный идентификатор

обьясните тупому
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
16.03.2012, 20:17     не компилируется #2
C++
1
glutDisplayFunc(Game::game);
тут компилятор не знает, что у классе Game есть что-то под именем game
Попробуй сначала Game определить, потом View
HardMorg
2 / 25 / 3
Регистрация: 29.08.2010
Сообщений: 204
16.03.2012, 20:37  [ТС]     не компилируется #3
Kastaneda, пробывал, ситуация ровно такая же только наоборот
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,204
Завершенные тесты: 1
16.03.2012, 20:52     не компилируется #4
В VS 2008 если перенести класс Game в начало,
то эта ошибка пропадает.
HardMorg
2 / 25 / 3
Регистрация: 29.08.2010
Сообщений: 204
16.03.2012, 20:54  [ТС]     не компилируется #5
zss2, у меня 2010
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
16.03.2012, 20:56     не компилируется #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
class View;
class Data;
 
class Game {
 
private:
        View *interface;
        Data *data;
public:
        Game();
        void startGame();
 
        static void game() {
 
         
 
        }
};
 
class View {
 
private:
        static int left;
        static int right;
        static int position_x;
        static int position_y;
        static int *argc;
        static char **argv;
        static int bottom;
        static int top;
        static int windowSize;
 
public:
 
        View() {}
 
        static void create_window() {
 
 
                Game::game();
 
        }
        void draw() {
 
        }
 
        static int const& getLeft() {
                return left;
        }
         
        static int const& getRight()  {
                return right;
        }
 
        static void setArgc(int *ptr) {
                argc = ptr;
        }
        static void setArgv(char **a) {
                argv = a;
        }
};
 
void Game::startGame() {
 
                View::create_window();
 
}
Game::Game() {
 
                interface = new View;
}
у меня нет Glut'а, поэтому слегка упростил код. Но суть должна быть понятна.
HardMorg
2 / 25 / 3
Регистрация: 29.08.2010
Сообщений: 204
16.03.2012, 22:46  [ТС]     не компилируется #7
Kastaneda, Большое вам конешно спасибо, но все же хотелось бы разобратся ) все таки нужно всегда понимать что происходит, я толком не дал дупля
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
16.03.2012, 23:56     не компилируется #8
Цитата Сообщение от HardMorg Посмотреть сообщение
glutDisplayFunc(Game::game);
в этой точке компилятор ещё ничего не знает о классе Game. поэтому Game::game для него
Цитата Сообщение от HardMorg Посмотреть сообщение
необъявленный идентификатор
HardMorg
2 / 25 / 3
Регистрация: 29.08.2010
Сообщений: 204
17.03.2012, 00:39  [ТС]     не компилируется #9
retmas, Ну это впринцыпе понятно, но я все же обьявил сверху что есть такой класс Game или ему этого мало? и нужно функции реализовывать за пределами класса?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2012, 00:45     не компилируется
Еще ссылки по теме:

Не компилируется C++
Не компилируется C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
17.03.2012, 00:45     не компилируется #10
Цитата Сообщение от HardMorg Посмотреть сообщение
но я все же обьявил сверху что есть такой класс Game
из этого объявления компилятор не может делать никаких выводов об этом классе, в т.ч. и то что он содержит статическую ф-ю Game::game()
Yandex
Объявления
17.03.2012, 00:45     не компилируется
Ответ Создать тему
Опции темы

Текущее время: 09:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru