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

g++ Заголовочные файлы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Justix
 Аватар для Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
23.06.2012, 16:05     g++ Заголовочные файлы #1
Значит есть у меня файлик main.cpp к нему инклудиться #include "Event.h" .В этом хидере название функции void event_loop(); .Так же этот хидер инклудиться к event.cpp и там уже полный код функции.
Но когда я эту функцию вызываю в main.cpp,он выдаёт ошибку на ней,ну типо чо за функция такая.
Короче просто не видит её.Но почему так,что я не правильно сделал?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2012, 16:05     g++ Заголовочные файлы
Посмотрите здесь:

Заголовочные файлы C++
C++ Заголовочные файлы
C++ Заголовочные файлы
C++ Заголовочные файлы
Заголовочные файлы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.06.2012, 16:10     g++ Заголовочные файлы #2
А файл event.cpp при компиляции указываете?
Код
g++ -o main main.cpp event.cpp
Если да, выкладывайте код...
Justix
 Аватар для Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
23.06.2012, 16:28  [ТС]     g++ Заголовочные файлы #3
неа,не делал,просто не знал что так нужно)
Спасибо,помогло)

Добавлено через 12 минут
А вот ещё вопрос!!!!есть файлик draw.cpp и в нём используются всякие функции и переменные и библиотеки из init.cpp.Ну и он почему то на это ошибку выдаёт.Хотя я их оба прописал в компиляторе
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.06.2012, 16:50     g++ Заголовочные файлы #4
Justix, ну опять же - либо больше подробностей, что где и как объявлено, либо ждите кого-нибудь с прокачаным уровнем телепатии...
Justix
 Аватар для Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
23.06.2012, 16:57  [ТС]     g++ Заголовочные файлы #5
Извините...)
init.cpp
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <X11/keysym.h>
#include <X11/keysymdef.h>
#include <GL/gl.h>
#include <GL/glx.h>
 
 
#include <stdio.h>
#include "init.h"
#include "draw.h"
 
 
 
 
 
 
 
int Attr[] = {  GLX_RGBA,
                GLX_RED_SIZE, 1,
                GLX_GREEN_SIZE, 1,
                GLX_BLUE_SIZE, 1,
                GLX_DEPTH_SIZE, 16,
                GLX_ALPHA_SIZE,1,
                GLX_DOUBLEBUFFER,
                None};
 
XVisualInfo             *xvVisualInfo;
Colormap                cmColorMap;
XSetWindowAttributes    winAttr;
GLXContext              glXContext;
Display                 *dpDisplay;
Window                  win;
 
 
 
 
int Openwindow()
{
 
    dpDisplay = XOpenDisplay(NULL);
    if(dpDisplay == NULL) return 0; 
 
    if(!glXQueryExtension(dpDisplay, NULL, NULL)) return 0; 
 
 
    xvVisualInfo = glXChooseVisual(dpDisplay, DefaultScreen(dpDisplay), Attr);
    if(xvVisualInfo == NULL) return 0; 
 
 
    cmColorMap = XCreateColormap(dpDisplay, RootWindow(dpDisplay, xvVisualInfo->screen), xvVisualInfo->visual, AllocNone);
    winAttr.colormap = cmColorMap;
    winAttr.border_pixel = 0;
    winAttr.background_pixel = 0;
    winAttr.event_mask = ExposureMask | ButtonPressMask | StructureNotifyMask | KeyPressMask;
 
 
    win = XCreateWindow(dpDisplay, RootWindow(dpDisplay, xvVisualInfo->screen),
                        0, 0,
                        1280, 960, 
                        0,
                        xvVisualInfo->depth, 
                        InputOutput,
                        xvVisualInfo->visual,
                        CWBorderPixel | CWColormap | CWEventMask,
                        &winAttr);
 
 
    glXContext = glXCreateContext(dpDisplay, xvVisualInfo, NULL, True);
if(glXContext == NULL) return 0; 
 
    glXMakeCurrent(dpDisplay, win, glXContext); 
    XMapWindow(dpDisplay, win);
    glEnable(GL_LIGHTING);
         //   glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
         glEnable( GL_DEPTH_TEST );            // Разрешить тест глубины
        glDepthFunc( GL_LESS);            // Тип теста глубины
      //    glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );      // Улучшение в вычислении перспективы
 
 
    return 0;
}
 
 
char    keyStr[20];
void event_loop()
{
    XEvent event;
 
    while (1)
    {
        XNextEvent(dpDisplay, &event);
        switch (event.type)
        {
            case Expose: redraw(); break; 
            case KeyPress :
      
          glXDestroyContext(dpDisplay,glXContext);
             XCloseDisplay(dpDisplay);
 
             break;
            case ConfigureNotify: resize(event.xconfigure.width, event.xconfigure.height); break; 
        }
    }
}
draw.cpp
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
#include "draw.h"
#include <math.h>
#include "box.h"
 
#define GL_PI 3.1415f
 
 GLfloat angle;
void draw(){
    //for(angle=0.01f;angle<=360.0f;angle+=0.01f){
    //      glClearColor(0.4, 0.5, 0.6, 0.0);
  //      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
    //    glMatrixMode(GL_MODELVIEW);
    //    glLoadIdentity();
      //    glPushMatrix();
     box* box_1=new box(10.0f,0.0f,10.0f,0.0f);
        
                 
    //    glPopMatrix();
       // sleep(1000);
    //    if(angle==359.0f)angle=1.0f;
    //    glXSwapBuffers(dpDisplay, win); 
    //    }
    }
    
void redraw()
{
   glClearColor(0.0,0.0,0.0,0.0);
  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  draw();
  glXSwapBuffers(dpDisplay, win);
}
 
void resize(unsigned int width, unsigned int height)
{ 
    glViewport(0, 0, width, height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
//gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,-100,100);
    glOrtho(-100.0, 100.0, -100.0, 100.0, -100.0, 100.0);
        glRotatef(10.0f,1.0f,0.0f,0.0f);
    glRotatef(-20.0f,0.0f,1.0f,0.0f);
    
    glMatrixMode(GL_MODELVIEW);
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
#include "init.h"
 
 
 
int main(int argc, char* argv[]){
    Openwindow();
    event_loop();
    return 0; 
    }
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
23.06.2012, 17:03     g++ Заголовочные файлы #6
Код это хорошо. Но полный текст сообщения об ошибке ещё лучше!

Добавлено через 2 минуты
К тому же заголовочных файлов init.h и draw.h отсюда не видать что-то.
Justix
 Аватар для Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
23.06.2012, 17:03  [ТС]     g++ Заголовочные файлы #7
Воть)
Миниатюры
g++ Заголовочные файлы  
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
23.06.2012, 17:06     g++ Заголовочные файлы #8
А box.h это своё? Ошибка-то, вероятно, в нём, судя по первому же сообщению.
Justix
 Аватар для Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
23.06.2012, 17:11  [ТС]     g++ Заголовочные файлы #9
Ну всё своё)а бокс.h работал и ничего не понял пока не сказали что весь код функций в хидерах не держат и надо разделить на хидер и цпп
box.h
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
 
 class box{
     public:
     box();
     box(GLfloat ,GLfloat ,GLfloat ,GLfloat );  
     }; 
        box::box(){} 
     box::box(GLfloat size,GLfloat x,GLfloat y,GLfloat z){   
             glBegin(GL_QUADS);
                glVertex3f(x,y,z);
                glVertex3f(x,y+size,z);
                glVertex3f(x+size,y+size,z);
                glVertex3f(x+size,y,z);
                      
                glVertex3f(x+size,y,z);
                glVertex3f(x+size,y+size,z);
                glVertex3f(x+size,y+size,z-size);
                glVertex3f(x+size,y,z-size);
                
                glVertex3f(z,y,z-size);
                glVertex3f(x,y+size,z-size);
                glVertex3f(x+size,y+size,z-size);
                glVertex3f(x+size,y,z-size);
                             glEnd();
         
         }
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
23.06.2012, 17:41     g++ Заголовочные файлы #10
Надо чтобы gl.h и glx.h подключались и в draw.cpp тоже. Либо перед включением box.h либо внутри box.h.
Justix
 Аватар для Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
23.06.2012, 17:54  [ТС]     g++ Заголовочные файлы #11
А это разве правильно?два раза в программе подключать библиотеки?

Добавлено через 52 секунды
И ещё,ошибки функций убрал.А как быть с перменными из init.cpp?на них ошибка всё стоит
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
23.06.2012, 18:19     g++ Заголовочные файлы #12
Цитата Сообщение от Justix Посмотреть сообщение
А это разве правильно?два раза в программе подключать библиотеки?
#include не подключает библиотеки. #include встраивает текст заголовочного файла в указанное место. Заголовочные файлы для того и нужны, чтобы включать определения функций в каждый модуль, где эти функции используются. По той же причине в заголовке не должно быть кода (за исключением inline) и глобальных переменных. Потому что если такой заголовок включить в 2 модуля, то код функций и переменные будут определены 2 раза и во время компоновки (связывания, линковки) возникнет ошибка.
А с переменными проблема в том, что в модуле draw.cpp ничего не известно о глобальных переменных. Так что их там (в draw.cpp) можно объявить с ключевым словом extern, или же сделать это в заголовочном файле init.h (тоже с extern).

Добавлено через 2 минуты
Но если возможно — лучше вообще избавляться от глобальных переменных. Они бывают нужны, но чаще можно обойтись без них.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2012, 18:22     g++ Заголовочные файлы
Еще ссылки по теме:

Заголовочные файлы (.h) C++
заголовочные файлы C++
C++ Заголовочные файлы

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

Или воспользуйтесь поиском по форуму:
Justix
 Аватар для Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
23.06.2012, 18:22  [ТС]     g++ Заголовочные файлы #13
Спасибо за пояснение)
Yandex
Объявления
23.06.2012, 18:22     g++ Заголовочные файлы
Ответ Создать тему
Опции темы

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