Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/14: Рейтинг темы: голосов - 14, средняя оценка - 4.86
 Аватар для Justix
73 / 19 / 0
Регистрация: 26.04.2012
Сообщений: 233

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

23.06.2012, 16:05. Показов 3087. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Значит есть у меня файлик main.cpp к нему инклудиться #include "Event.h" .В этом хидере название функции void event_loop(); .Так же этот хидер инклудиться к event.cpp и там уже полный код функции.
Но когда я эту функцию вызываю в main.cpp,он выдаёт ошибку на ней,ну типо чо за функция такая.
Короче просто не видит её.Но почему так,что я не правильно сделал?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.06.2012, 16:05
Ответы с готовыми решениями:

Заголовочные файлы .h, файлы исходного когда c/c++ и установление связи между ними
Всем добрый вечер!) Относительно недавно стал изучать c/c++, хочу полюбопытствовать ,так как появился вопрос. Почему при объявлении...

Работа в Visual Studio 2015 - как добавить файлы исходного кода и заголовочные файлы?
Приветствую всех! Столкнулся с тем, что решая задачи по книге Лафоре про графику, не смог добавить файлы .h и .cpp, скачав их с одной из...

Заголовочные файлы
Где в Visual studio находится папка с заголовочными файлами, такие как iostream, cmath. Хочу закинуть один файл со всеми необходимыми для...

12
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
23.06.2012, 16:10
А файл event.cpp при компиляции указываете?
Code
1
g++ -o main main.cpp event.cpp
Если да, выкладывайте код...
1
 Аватар для Justix
73 / 19 / 0
Регистрация: 26.04.2012
Сообщений: 233
23.06.2012, 16:28  [ТС]
неа,не делал,просто не знал что так нужно)
Спасибо,помогло)

Добавлено через 12 минут
А вот ещё вопрос!!!!есть файлик draw.cpp и в нём используются всякие функции и переменные и библиотеки из init.cpp.Ну и он почему то на это ошибку выдаёт.Хотя я их оба прописал в компиляторе
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
23.06.2012, 16:50
Justix, ну опять же - либо больше подробностей, что где и как объявлено, либо ждите кого-нибудь с прокачаным уровнем телепатии...
0
 Аватар для Justix
73 / 19 / 0
Регистрация: 26.04.2012
Сообщений: 233
23.06.2012, 16:57  [ТС]
Извините...)
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; 
    }
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
23.06.2012, 17:03
Код это хорошо. Но полный текст сообщения об ошибке ещё лучше!

Добавлено через 2 минуты
К тому же заголовочных файлов init.h и draw.h отсюда не видать что-то.
0
 Аватар для Justix
73 / 19 / 0
Регистрация: 26.04.2012
Сообщений: 233
23.06.2012, 17:03  [ТС]
Воть)
Миниатюры
g++ Заголовочные файлы  
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
23.06.2012, 17:06
А box.h это своё? Ошибка-то, вероятно, в нём, судя по первому же сообщению.
0
 Аватар для Justix
73 / 19 / 0
Регистрация: 26.04.2012
Сообщений: 233
23.06.2012, 17:11  [ТС]
Ну всё своё)а бокс.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();
         
         }
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
23.06.2012, 17:41
Надо чтобы gl.h и glx.h подключались и в draw.cpp тоже. Либо перед включением box.h либо внутри box.h.
0
 Аватар для Justix
73 / 19 / 0
Регистрация: 26.04.2012
Сообщений: 233
23.06.2012, 17:54  [ТС]
А это разве правильно?два раза в программе подключать библиотеки?

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

Добавлено через 2 минуты
Но если возможно — лучше вообще избавляться от глобальных переменных. Они бывают нужны, но чаще можно обойтись без них.
1
 Аватар для Justix
73 / 19 / 0
Регистрация: 26.04.2012
Сообщений: 233
23.06.2012, 18:22  [ТС]
Спасибо за пояснение)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.06.2012, 18:22
Помогаю со студенческими работами здесь

Заголовочные файлы
Подключил два заголовочных файла, при компиляции пишет, что не знает имени функции Header.h #pragma once float F1(float* ar1,...

Заголовочные файлы *.h
Доброго времени суток! Как понят следующее: В заголовочных файлах, в целях более быстрой компиляции, для указателей на типы данных...

заголовочные файлы в с++
я вот не могу понять, их обязательно делать в своих программах? В том смысле, что бы код был, так сказать &quot;правильным, хорошим&quot;. ...

Заголовочные файлы
Здравствуйте ув. Пользователи, У меня такой вопрос: Есть ли хорошие книги по заголовочным файла как правильно ими пользоваться... Просто...

Заголовочные файлы
Почему в учебниках пишет, например, чтобы использовать какую-то математическую функцию, то надо подключить файл &lt;cmath&gt;. У меня из...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru