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

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

26.12.2020, 16:21. Показов 2324. Ответов 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
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru