Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2014, 23:18   #1
tolikprankster
Пользователь
 
Регистрация: 09.02.2013
Сообщений: 60
По умолчанию Программа из нескольких файлов

Сделал недавно тетрис. Теперь решил разбить программу на несколько файлов. Получилось семь.

Figure.h Figure.cpp

Level.h Level.cpp

Global.h Global.cpp - глобальные переменные

Tetris.cpp - файл с главной функцией

ВСЕ 3 заголовочных файла взяты в конструкции:
Код:
#ifndef имяфайла_H
#define имяфайла_H

#endif
Кроме главного файла заголовочные файлы объявляются ещё и в других cpp.

однако при компиляции вылетает куча однообразных ошибок типа:

1>Tetris.obj : error LNK2005: "bool keystatedown" (?keystatedown@@3_NA) уже определен в Figure.obj
1>Global.obj : error LNK2005: "struct HBRUSH__ * hBrush1" (?hBrush1@@3PAUHBRUSH__@@A) уже определен в Figure.obj

И так почти на каждую переменную...
в чем проблема?
tolikprankster вне форума Ответить с цитированием
Старый 25.09.2014, 23:29   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

А вы не могли бы прикрепить к сообщению архив с исходниками?
8Observer8 вне форума Ответить с цитированием
Старый 26.09.2014, 02:29   #3
tolikprankster
Пользователь
 
Регистрация: 09.02.2013
Сообщений: 60
По умолчанию

Фух, уже разобрался, первый раз делил на несколько файлов - забыл про extern...
Всё работает. Теперь проблема другая.
файл Global.h(Глобальные переменные) я подключаю ко всем четырем cpp файлам. И как я понял каждый файл добавляет его в себя, это можно как - то изменить?

Последний раз редактировалось tolikprankster; 26.09.2014 в 02:35.
tolikprankster вне форума Ответить с цитированием
Старый 26.09.2014, 06:48   #4
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Цитата:
файл Global.h(Глобальные переменные) я подключаю ко всем четырем cpp файлам. И как я понял каждый файл добавляет его в себя, это можно как - то изменить?
Эта конструкция как раз и нужна для того, чтобы каждый файл не добавлял его:
Код:
ifndef имяфайла_H
#define имяфайла_H

#endif
8Observer8 вне форума Ответить с цитированием
Старый 27.09.2014, 00:02   #5
tolikprankster
Пользователь
 
Регистрация: 09.02.2013
Сообщений: 60
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Эта конструкция как раз и нужна для того, чтобы каждый файл не добавлял его:
Код:
ifndef имяфайла_H
#define имяфайла_H

#endif
Честно сказать искал инфу, по созданию многофайловых проектов, и вот что нашел в гугле:
Цитата:
При обработке препроцессором, текст из блока:

#ifndef _ONE_H_
#define _ONE_H_
... прототипы и объявления...
#endif

не будет вставлен дважды в один .cpp файл - таким образом можно избежать двойного объявления одной и той же функции в пределах одного .cpp!
Или выделенное утверждение ложно?

Последний раз редактировалось tolikprankster; 27.09.2014 в 00:08.
tolikprankster вне форума Ответить с цитированием
Старый 27.09.2014, 00:53   #6
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Имеется ввиду такая ситауция:

file1.h
Код:
// Какой-то код
file2.h
Код:
#include "file1.h"
// Какой-то код
file3.h
Код:
#include "file1.h"
// Какой-то код
file4.h
Код:
#include "file2.h"
#include "file3.h"
// Какой-то код
В file4.h два раза включается file1.h, а на это компилятор будет ругаться (точнее, на повторые объявления переменных, задублирование в общем). Поэтому и нужно всегда писать конструкцию #ifndef

Последний раз редактировалось 8Observer8; 27.09.2014 в 01:10.
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа из нескольких файлов, а не только .exe fezilk25 Общие вопросы Delphi 9 17.08.2012 11:50
компиляция нескольких файлов Hemul Общие вопросы C/C++ 2 28.09.2011 23:36
Открытие нескольких файлов ChEaTeR-abc Помощь студентам 6 15.07.2010 17:03
Проигрывание нескольких файлов <-=SG=-> Общие вопросы Delphi 3 11.10.2008 15:47
открытие нескольких файлов valyan Общие вопросы Delphi 10 17.07.2008 20:27