С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456

Раздельная компиляция

26.12.2020, 16:21. Показов 2311. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть работающая прога рисует сетку точек, но она одной простыней кода.
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
//Вывод точек массивами с окрасом из массива
#include <gl/glut.h>
//#include <iostream> 
//#include <iomanip>
#include <math.h>
//using namespace std;
 
const int imSiz=500; // размер картинки
const int pointsNumX=100; //точек по осям
const int pointsNumY=100;
 
 
const int pointsNum=pointsNumX*pointsNumY; // расчет длинны массива
GLfloat Vertex[pointsNum][2];
GLfloat Colors[pointsNum][3];
 
 
 
void FillArr()
{
int VertNum=0;
float dx=1.8f/((float)pointsNumX-1.0f);
float dy=1.8f/((float)pointsNumY-1.0f);
    for(float x=-0.9f;x<0.9f;x+=dx)
    {
        //cout<<setw(5)<<fixed<<setprecision(3)<<x<<"\n";
        for(float y=-0.9f;y<0.9f;y+=dy)
        {
            Vertex[VertNum][0] = x;
            Vertex[VertNum][1] = y;
            Colors[VertNum][0] = 0.5f+0.4f*sin(15.1f*x+1.6f);
            Colors[VertNum][1] = 0.5f+0.4f*sin(13.1f*x+0.4f);
            Colors[VertNum][2] = 0.5f+0.45f*sin(14.2f*x-1.5f);
            VertNum++;
        }
    }
 
}
 
void Draw()
{
    glVertexPointer(2, GL_FLOAT, 0, Vertex);
    glColorPointer(3, GL_FLOAT, 0, Colors);
    
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);
    
    //glDrawArrays(GL_POLYGON, 0, 4);
    glDrawArrays(GL_POINTS, 0, pointsNum);
 
    glDisableClientState(GL_COLOR_ARRAY);
    glDisableClientState(GL_VERTEX_ARRAY);
    glutSwapBuffers();
}
 
void SetupGL() 
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    //glOrtho(0, imSiz , imSiz, 0, -1, 1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glClearColor(0, 0, 0, 0);
    glPointSize(2.0); //<---
}
 
int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize(imSiz, imSiz); 
    glutInitWindowPosition(500, 200);
    glutCreateWindow("Reaction Diffusion");
    SetupGL();
    FillArr();
    Draw();
    glutMainLoop();
    return 0;
}
Как разбить прогу на отдельные файлы, раздельная копиляция?
Примерно так
Название: ScreenShot00965.jpg
Просмотров: 53

Размер: 34.6 Кб
Делал по примеру.
https://code-live.ru/post/sepa... ation-cpp/
Ругаеться на строку
C++
1
Vertex[VertNum][0] = x;
Не видит VertNum но она определена как экстерн.
Как порезать все правильно?

arrays.h
C++
1
2
3
4
5
6
#ifndef __ARRAYS_H__
#define __ARRAYS_H__
 
GLfloat Vertex;
GLfloat Colors;
#endif
functions.h
C++
1
2
3
4
5
6
#ifndef __FUNCTIONS_H__
#define __FUNCTIONS_H__
void FillArr();
void Draw();
void SetupGL();
#endif
includes.h
C++
1
2
3
4
5
6
7
8
9
#ifndef __INCLUDES_H__
#define __INCLUDES_H__
#include <gl/glut.h>
#include <math.h>
 
#include "arrays.h"
#include "functions.h"
#include "varibles.h"
#endif
varibles.h
C++
1
2
3
4
5
6
7
8
#ifndef __VARIBLES_H__
#define __VARIBLES_H__
extern const int imSiz; // размер картинки
extern const int pointsNumX; //точек по осям
extern const int pointsNumY;
extern const int pointsNum; // расчет длинны массива
extern int VertNum;
#endif
arrays.cpp
C++
1
2
3
#include "includes.h"
Vertex[pointsNum][2];
Colors[pointsNum][3];
Draw.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "includes.h"
void Draw()
{
    glVertexPointer(2, GL_FLOAT, 0, Vertex);
    glColorPointer(3, GL_FLOAT, 0, Colors);
    
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);
    
    //glDrawArrays(GL_POLYGON, 0, 4);
    glDrawArrays(GL_POINTS, 0, pointsNum);
 
    glDisableClientState(GL_COLOR_ARRAY);
    glDisableClientState(GL_VERTEX_ARRAY);
    glutSwapBuffers();
}
FillArr.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "includes.h"
void FillArr()
{
VertNum=0;
float dx=1.8f/((float)pointsNumX-1.0f);
float dy=1.8f/((float)pointsNumY-1.0f);
    for(float x=-0.9f;x<0.9f;x+=dx)
    {
        //cout<<setw(5)<<fixed<<setprecision(3)<<x<<"\n";
        for(float y=-0.9f;y<0.9f;y+=dy)
        {
            Vertex[VertNum][0] = x;
            Vertex[VertNum][1] = y;
            Colors[VertNum][0] = 0.5f+0.4f*sin(15.1f*x+1.6f);
            Colors[VertNum][1] = 0.5f+0.4f*sin(13.1f*x+0.4f);
            Colors[VertNum][2] = 0.5f+0.45f*sin(14.2f*x-1.5f);
            VertNum++;
        }
    }
 
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize(imSiz, imSiz); 
    glutInitWindowPosition(500, 200);
    glutCreateWindow("Reaction Diffusion");
    SetupGL();
    FillArr();
    Draw();
    glutMainLoop();
    return 0;
}
SetupGL.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
#include "includes.h"
void SetupGL() 
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    //glOrtho(0, imSiz , imSiz, 0, -1, 1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glClearColor(0, 0, 0, 0);
    glPointSize(2.0); //<---
}
varibles.cpp
C++
1
2
3
4
5
6
#include "includes.h"
imSiz=500; // размер картинки
pointsNumX=100; //точек по осям
pointsNumY=100;
pointsNum=pointsNumX*pointsNumY; // расчет длинны массива
VertNum=0;
Может нужно что-то включать в настройках студии типа использовать предкомпилированные заголовки что-то такое?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.12.2020, 16:21
Ответы с готовыми решениями:

раздельная компиляция и сборка в единый файл.Есть код
Подскажите,какое меню юзать в VS C++(или Dev-C++) чтобы добавить к проекту 2 файла,совсем уже запарился? Есть код,он разделён на 3...

Раздельная компиляция
Здравствуйте, я перечитал на форуме информацию по этой теме, но пока что не сумел разобраться. У меня в проекте такие файлы: ...

раздельная компиляция
Вот есть три файла: заголовочный файл с классом (.h), файл с реализацией методов класса (.cpp), и функцию main. Как, корректно, выполнить...

5
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
26.12.2020, 21:41  [ТС]
Почти работает, удалось скинуть в отдельные файлы
SetupGL Draw и это работает.
Draw.h
C++
1
2
3
4
#pragma once
#include <gl/glut.h>
#include <math.h>
void Draw();
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
#include "Draw.h"
extern const int pointsNumX=100; //точек по осям
extern const int pointsNumY=100;
extern const int pointsNum=pointsNumX*pointsNumY; // расчет длинны массива
GLfloat Vertex[pointsNum][2];
GLfloat Colors[pointsNum][3];
 
void Draw()
{
    glVertexPointer(2, GL_FLOAT, 0, Vertex);
    glColorPointer(3, GL_FLOAT, 0, Colors);
    
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);
    
    //glDrawArrays(GL_POLYGON, 0, 4);
    glDrawArrays(GL_POINTS, 0, pointsNum);
 
    glDisableClientState(GL_COLOR_ARRAY);
    glDisableClientState(GL_VERTEX_ARRAY);
    glutSwapBuffers();
}
SetupGL.h
C++
1
2
3
4
#pragma once
#include <gl/glut.h>
#include <math.h>
void SetupGL();
SetupGL.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
#include "SetupGL.h"
void SetupGL() 
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    //glOrtho(0, imSiz , imSiz, 0, -1, 1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glClearColor(0, 0, 0, 0);
    glPointSize(2.0); //<---
}

Остался странный багкогда писал прогу одним в одном файле этот код работал без ошибок, затем захотел сделать несколько файлов с хедерами.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void FillArr()
{
int VertNum=0;
float dx=1.8f/((float)pointsNumX-1.0f);
float dy=1.8f/((float)pointsNumY-1.0f);
    for(float x=-0.9f;x<0.9f;x+=dx)
    {
        //cout<<setw(5)<<fixed<<setprecision(3)<<x<<"\n";
        for(float y=-0.9f;y<0.9f;y+=dy)
        {
            Vertex[VertNum][0] = x;
            Vertex[VertNum][1] = y;
            Colors[VertNum][0] = 0.5f+0.4f*sin(15.1f*x+1.6f);
            Colors[VertNum][1] = 0.5f+0.4f*sin(13.1f*x+0.4f);
            Colors[VertNum][2] = 0.5f+0.45f*sin(14.2f*x-1.5f);
            VertNum++;
        }
    }
}
Теперь сделал 2 файла.
FillArr.h
C++
1
2
3
4
#pragma once
#include <gl/glut.h>
#include <math.h>
void FillArr();
FillArr.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
#include "FillArr.h"
extern const int pointsNumX;
extern const int pointsNumY;
extern float Vertex;
extern float Colors;
 
FillArr.cpp
void FillArr()
{
int VertNum=0;
float dx=1.8f/((float)pointsNumX-1.0f);
float dy=1.8f/((float)pointsNumY-1.0f);
    for(float x=-0.9f;x<0.9f;x+=dx)
    {
        //cout<<setw(5)<<fixed<<setprecision(3)<<x<<"\n";
        for(float y=-0.9f;y<0.9f;y+=dy)
        {
            Vertex[VertNum][0] = x;
            Vertex[VertNum][1] = y;
            Colors[VertNum][0] = 0.5f+0.4f*sin(15.1f*x+1.6f);
            Colors[VertNum][1] = 0.5f+0.4f*sin(13.1f*x+0.4f);
            Colors[VertNum][2] = 0.5f+0.45f*sin(14.2f*x-1.5f);
            VertNum++;
        }
    }
}
Стало требовать на все эти строки ошибка « для индекса требуется массив или указатель»
C++
1
2
3
4
5
            Vertex[VertNum][0] = x;
            Vertex[VertNum][1] = y;
            Colors[VertNum][0] = 0.5f+0.4f*sin(15.1f*x+1.6f);
            Colors[VertNum][1] = 0.5f+0.4f*sin(13.1f*x+0.4f);
            Colors[VertNum][2] = 0.5f+0.45f*sin(14.2f*x-1.5f);
Это баг? Почему хватало переменной VertNum? Что вводить?
Я так понял теперь почему-то хочет чтобы был создан указатель который плюсовать вместо VertNum++; ?
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
26.12.2020, 21:53
Цитата Сообщение от Excalibur921 Посмотреть сообщение
extern float Vertex;
extern float Colors;
Это не массивы.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
26.12.2020, 22:28  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
не массивы.
Массивы, может неправильно заданы. GLfloat
Резал этот код нижний код с циклом for
Как вывести на экран множество точек
0
26.12.2020, 22:30

Не по теме:

Excalibur921, вам в другой теме человек сейчас всё объяснит(лучше меня), я не буду повторяться

0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
27.12.2020, 01:46  [ТС]
Пример многофайловой проги. Рисует массив точек с окрасом glut. Нужно пробовать развить эту идею для мелких поделок в 1 к строк, удобно по идее для дебага.
исходная прога
2.zip
многофайловый вариант
1.zip
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.12.2020, 01:46
Помогаю со студенческими работами здесь

Раздельная компиляция
В Гугле не забанен,нашел описание самого принципа,но конкретных примеров не нашел. Вопросы вот какие: 1) Если у меня есть класс,...

Раздельная компиляция
Пусть есть программа, которая состоит из 2 файлов. 1 файл: основной, там где main 2 файл: содержит некоторые функции Также есть...

Шаблоны и раздельная компиляция
Здравствуйте! Если просто я пишу класс, например: class Test { private: int *pm; ... public: bool inc();

Шаблоны и раздельная компиляция
Добрый утро, в мыслях хочу реализовать класс шаблонный который можно использовать как при раздельной компиляции и как обычный подключаемый...

Раздельная компиляция файлов
Если класс определен в раздельных файлах и изменения сделаны в части main программы, кот использует класс - какой файл необходимо...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru