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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
#1

Как избавиться от замусоривания cpp файлов дубликатами деклараций функций и переменных? - C++

17.11.2014, 08:52. Просмотров 637. Ответов 28
Метки нет (Все метки)

Как избавиться от замусоривания cpp файлов дубликатами деклараций функций и переменных?

У меня есть например несколько файлов:
opengl.h
C++
#ifndef OPENGL_H
#define OPENGL_H
 
extern int a;
extern void foo();
 
#endif // OPENGL_H
main.cpp
C++
#include "opengl.h"
int a;
 
int main()
{
  a = 5;
  return 0;
}
opengl.cpp
C++
#include "opengl.h"
int a;
 
void foo()
{
  a = 9;
}
Видно, что int a объявляется не только в opengl.h, но еще и в main.cpp и opengl.cpp. Как сделать, чтобы можно было один раз написать int a?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2014, 08:52     Как избавиться от замусоривания cpp файлов дубликатами деклараций функций и переменных?
Посмотрите здесь:

Как избавиться от глобальных переменных в многофайловом проекте на С++? - C++
Некоторые глобальные переменные можно заменить на глобальные константы. Долго промучилась с проектом, но на попытках избавления от...

Как писать проэкты из нескольких CPP файлов ? - C++
Поставил себе Visual C++ Express 2010, написал консольную программку. У неё внутри получилось много функций. Хочу теперь вынести их все в...

C++ (ооп) как из трех файлов (2 cpp и h) сделать одну программу? code blocks - C++
C++ (ооп) как из трех файлов (2 cpp и h) сделать одну программу? code blocks

Объясните, пожалуйста, как работает передача переменных при вызове функций? - C++
#include <iostream> #include <conio.h> using namespace std; void z(int *a,int lenght){ int *p; for...

Связка двух функций в разных .cpp файлах - C++
Извиняюсь если тема поднималась, может я плохо искал но не нашел вразумительного объяснения связывания двух функций через заголовочный...

Обращение файлов cpp - C++
Всем привет! Изображу наглядно код: main.cpp #include <iostream> using namespace std; void raznica(); void summa();

Создание cpp файлов - C++
я недавно начал зучать язык программированя С++ и делаю это самостоятельно с помашю книг и интернета. я ищю статьи где было бы подробно...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3692 / 1967 / 514
Регистрация: 18.10.2014
Сообщений: 3,546
17.11.2014, 09:08     Как избавиться от замусоривания cpp файлов дубликатами деклараций функций и переменных? #2
Цитата Сообщение от programina Посмотреть сообщение
Как сделать, чтобы можно было один раз написать int a?
Ну вообще-то должно быть два раза: объявление и определение. Для того, чтобы получить глобальную переменную (если она вам действительно нужна), в заголовочном файле должно быть написано 'extern int a;' (объявление), а в одном-единственном файле реализации - просто 'int a;' (определение). В какой именно файл вы поместите это определение - ваш выбор. Все.

А то, что у вас определение 'int a;' повторяется в нескольких файлах реализации - это грубая ошибка. В языке С++ такое запрещается. Поэтому ответ на ваш вопрос прост - просто выкосите нафиг лишние определения из файлов реализации и оставьте лишь одно объявление в заголовочном файле и одно определение в каком-то файле реализации.

Ситуация полностью аналогична ситуации с 'foo'. Вы же не пихаете определение функции 'foo' в несколько файлов реализации? Вот и определение переменной тоже пихать не надо.
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
17.11.2014, 09:27  [ТС]     Как избавиться от замусоривания cpp файлов дубликатами деклараций функций и переменных? #3
Так ведь если я уберу int a например в main.cpp, то будет ошибка, значит нужно в каждый файл cpp писать int a.
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3692 / 1967 / 514
Регистрация: 18.10.2014
Сообщений: 3,546
17.11.2014, 09:29     Как избавиться от замусоривания cpp файлов дубликатами деклараций функций и переменных? #4
Цитата Сообщение от programina Посмотреть сообщение
Так ведь если я уберу int a например в main.cpp, то будет ошибка
С чего бы это вдруг? Какая ошибка? Приведите пример.

Если это файлы одной программы, то нет, никакой ошибки не будет.
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
17.11.2014, 09:30  [ТС]     Как избавиться от замусоривания cpp файлов дубликатами деклараций функций и переменных? #5
А если этих файлов cpp штук 500, то 500 int a по одному в каждом + 1 extern int a в заголовке.
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3692 / 1967 / 514
Регистрация: 18.10.2014
Сообщений: 3,546
17.11.2014, 09:36     Как избавиться от замусоривания cpp файлов дубликатами деклараций функций и переменных? #6
Цитата Сообщение от programina Посмотреть сообщение
А если этих файлов cpp штук 500, то 500 int a по одному в каждом
На колу мочало, начинай сначала... Я же ясно сказал - так делать нельзя ни в коем случае. 'int a;' должно присутствовать только в одном файле реализации. Все.

Хоть у вас 500 файлов, хоть миллион, во всей программе у вас будет открытым текстом написано ровно два 'int a;': один в заголовке как 'extern int a;' и еще один в одном из файлов реализации, как 'int a;'.
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
17.11.2014, 09:37  [ТС]     Как избавиться от замусоривания cpp файлов дубликатами деклараций функций и переменных? #7
А если не один int a, а еще int b, int c, int d и т.д. штук 200, то получится 200*500 = 100000 переменных.
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3692 / 1967 / 514
Регистрация: 18.10.2014
Сообщений: 3,546
17.11.2014, 09:39     Как избавиться от замусоривания cpp файлов дубликатами деклараций функций и переменных? #8
Цитата Сообщение от programina Посмотреть сообщение
А если не один int a, а еще int b, int c, int d и т.д. штук 200,
Вы, я вижу, не читатель, а писатель.

В любом случае, если у вас в программе 200 глобальных переменных вида 'int a' россыпью, то проблему надо править в несколько другой консерватории...
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
17.11.2014, 09:40  [ТС]     Как избавиться от замусоривания cpp файлов дубликатами деклараций функций и переменных? #9
TheCalligrapher, мне кажется так не будет работать, в файле реализации, где нет int a; должно выдать ошибку. Вчера по крайней мере выдавало, сегодня вечером еще раз проверю.
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3692 / 1967 / 514
Регистрация: 18.10.2014
Сообщений: 3,546
17.11.2014, 09:41     Как избавиться от замусоривания cpp файлов дубликатами деклараций функций и переменных? #10
Цитата Сообщение от programina Посмотреть сообщение
TheCalligrapher, мне кажется так не будет работать, в файле реализации, где нет int a; должно выдать ошибку.
Вы несете чепуху. С чего бы это вдруг оно будет выдавать ошибку?

Наоборот, если вы начнете пихать 'int a' в каждый файл реализации, то получите от линкера ошибку множественного определения. (Некоторые реализации разрешают подобное, если определение не содержит инициализатора. Но это тем не менее не меняет того факта, что это ошибка.)

Цитата Сообщение от programina Посмотреть сообщение
Вчера по крайней мере выдавало,
Вчера вы что-то делали совсем не так, как описываете сейчас.
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
17.11.2014, 09:43  [ТС]     Как избавиться от замусоривания cpp файлов дубликатами деклараций функций и переменных? #11
В любом случае, если у вас в программе 200
глобальных переменных вида 'int a', то проблему
надо править в несколько другой консерватории...
Не надо, мне нужно много глобальных переменных, чтобы они виделись во всех файлах.
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3692 / 1967 / 514
Регистрация: 18.10.2014
Сообщений: 3,546
17.11.2014, 09:46     Как избавиться от замусоривания cpp файлов дубликатами деклараций функций и переменных? #12
Цитата Сообщение от programina Посмотреть сообщение
мне нужно много глобальных переменных, чтобы они виделись во всех файлах.
Именно для этого вы помещаете 'extern int a;' в заголовочный файл. Именно это делает переменную 'a' видимой во всех файлах (не забывайте только включать заголовочный файл везде, где надо). Больше ничего делать не надо.
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
17.11.2014, 09:47  [ТС]     Как избавиться от замусоривания cpp файлов дубликатами деклараций функций и переменных? #13
Вчера вы что-то делали совсем не так, как
описываете сейчас
Возможно. Пишу по памяти, компилятора по рукой нет

Добавлено через 1 минуту
Вечером точно скажу.
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,731
17.11.2014, 09:58     Как избавиться от замусоривания cpp файлов дубликатами деклараций функций и переменных? #14
Цитата Сообщение от programina Посмотреть сообщение
Видно, что int a объявляется не только в opengl.h, но еще и в main.cpp и opengl.cpp. Как сделать, чтобы можно было один раз написать int a?
для глобальных переменных, я обычно создаю
файл Global.c
C
1
2
3
4
#include "Global.h"
int a;
int b;
.......
и файл Global.h
C
1
2
3
4
5
6
#ifndef GLOBAL_H
#define GLOBAL_H
extern int a;
extern int b;
.......
#endif
потом где нужно подключаю Global.h
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2014, 10:06     Как избавиться от замусоривания cpp файлов дубликатами деклараций функций и переменных?
Еще ссылки по теме:

Архитектура размещения h и cpp файлов - C++
Доброго времени суток! Есть библа, содержащая ряд функций. Допустим, func1, func2 и ещё over 10. Меня интересует, как стандарты, здравая...

Несколько cpp файлов в проекте - C++
Доброго времени суток ! Есть проект и в нем 2 cpp файла: Main.cpp и BinaryNumber.cpp В последнем файле создан класс и его методы....

Условное подключение cpp файлов - C++
Здравствуйте,я вот захотел сделать в своей программе выбор языка,но увеличивать программу на кучу строк не захотел и поэтому создал 2 файла...

Добавление cpp файлов в процессе компиляции - C++
Есть у меня проект. Тут один файл main #include "D:\\test.h" void main() { test obj; obj.func(); }

Подключение в проекте .hpp и .cpp файлов - C++
Добрый день! Среда разработки Code Blocks 13.12 Компилятор GNU GCC В проекте существует 3 файла в проекте - main.cpp, SW229.cpp и...


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

Или воспользуйтесь поиском по форуму:
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
17.11.2014, 10:06  [ТС]     Как избавиться от замусоривания cpp файлов дубликатами деклараций функций и переменных? #15
для глобальных переменных, я обычно создаю
файл Global.c
Попробую сделать так, если не получится так как пишет TheKaligrapher
Yandex
Объявления
17.11.2014, 10:06     Как избавиться от замусоривания cpp файлов дубликатами деклараций функций и переменных?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru