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

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

Войти
Регистрация
Восстановить пароль
 
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
#1

Взаимное включение заголовочных файлов - C++

25.10.2013, 10:56. Просмотров 694. Ответов 8
Метки нет (Все метки)

Нужно передать объект по ссылке

Вот как сейчас:
C++
1
2
3
4
5
6
7
8
9
10
//LoadImages.h
class LoadImages {
    ttfInit();
};
 
//LoadImages.cpp
void LoadImages::ttfInit() {
     Event obj;
    currentScore << obj.getCurrentCounter();
}
Вот как должно быть:
C++
1
2
3
4
5
6
7
8
9
//LoadImages.h
class LoadImages {
    ttfInit(Event*);
};
 
//LoadImages.cpp
void LoadImages::ttfInit(Event* p) {
    currentScore << p -> getCurrentCounter();
}
Во втором случае беда в том, что в LoadImages.h нужно подключить файл Event.h, чтобы сделать объявление ttfInit(Event*), но я этого не могу сделать, т.к. Event.h уже инклудит файл LoadImages.h, т.е. взаимное включение будет.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2013, 10:56     Взаимное включение заголовочных файлов
Посмотрите здесь:

Правильное включение заголовочных файлов - C++
Привет, хочу задать такой вопрос. У меня есть классы в файлах Menu.h, Options.h, About.h, Game.h, Pause.h. Каждый из этих классов должен...

Включение заголовочных файлов дважды - C++
Как справится с тем, что некоторые файлы .h надо включить несколько раз, т.е. помимо main.cpp, еще и в других заголовочных файлах?...

Отличие заголовочных файлов - C++
чем отличается string.h cstring string

Назначение заголовочных файлов - C++
Я читала учебник и википедию - никак не доходит. В общем, может я неправильно поняла: есть у меня &quot;Моя программа.cpp&quot;, и есть...

Объявление заголовочных файлов - C++
Скажите в чем разница между объявлением вида: #include &lt;iostream&gt; и вида #include &quot;iostream&quot;

Подключение заголовочных файлов - C++
Здравствуйте! Подскажите, можно ли сделать так, чтобы при создании нового консольного проекта, наиболее часто используемые файлы (например,...

Подключение заголовочных файлов - C++
Начал изучать С++, скачал несколько книг и заметил что в одних при включении заголовочных файлов (например iostream.h) используется запись:...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
25.10.2013, 11:00     Взаимное включение заголовочных файлов #2
Цитата Сообщение от dimakozyr Посмотреть сообщение
т.к. Event.h уже инклудит файл LoadImages.h, т.е. взаимное включение будет.
Не будет в каждом новом файле если ты что то используешь, то его нужно обязательно подключать.
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.10.2013, 11:02     Взаимное включение заголовочных файлов #3
Цитата Сообщение от dimakozyr Посмотреть сообщение
Во втором случае беда в том, что в LoadImages.h нужно подключить файл Event.h, чтобы сделать объявление ttfInit(Event*)
этого не нужно делать, достаточно
C++
1
2
3
4
5
6
7
8
9
10
11
//LoadImages.h
class Event;
 
class LoadImages {
    ttfInit(Event*);
};
 
//LoadImages.cpp
void LoadImages::ttfInit(Event* p) {
    currentScore << p -> getCurrentCounter();
}
предварительного объявления в хедере
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
25.10.2013, 11:02     Взаимное включение заголовочных файлов #4
dimakozyr, почему у ttfInit нет имени типа?
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
25.10.2013, 11:03     Взаимное включение заголовочных файлов #5
Ты должен в файле Event.h делать защиту от повторного включения, да там у тебя по идее должны быть только объявления функций переменных, а объявлений может быть сколько угодно, главное что бы было только одно определение.
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
25.10.2013, 11:42  [ТС]     Взаимное включение заголовочных файлов #6
Цитата Сообщение от Jupiter Посмотреть сообщение
этого не нужно делать, достаточно
Делаю так:
C++
1
2
3
4
5
6
static class Events* p;  // p нужно для передачи в ttfInit() в качестве аргумента
class LoadImages {
  public:   
      LoadImages() : { ttfInit(p); }
    void ttfInit(Events*);
};
И теперь программа компилируется, но не запускается

Цитата Сообщение от programina Посмотреть сообщение
почему у ttfInit нет имени типа?
Он есть, просто здесь случайно пропустил, тип void

Цитата Сообщение от ninja2 Посмотреть сообщение
Ты должен в файле Event.h делать защиту от повторного включения
Я делаю с помощью pragma once, но если сделать:
C++
1
2
3
4
5
6
7
8
9
// classA.h
#include "classB.h"
class A {
    B obj; // Error: пропущена точка с запятой
};
 
// classB.h
#include "classA.h"
class B {};
то выдает, пропущена точка с запятой, а это, как я понимаю, потому что не определен базовый класс
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.10.2013, 11:48     Взаимное включение заголовочных файлов #7
Цитата Сообщение от dimakozyr Посмотреть сообщение
Делаю так:
static class Events* p; *// p нужно для передачи в ttfInit() в качестве аргумента
class LoadImages {
* public: *
* * * LoadImages() : { ttfInit(p); }
* * void ttfInit(Events*);
};
И теперь программа компилируется, но не запускается
этот код и близко неподпадает под то что ты спрашивал в 1-м посту, короче нет времени тебе тут пересказывать книги так что давай сам иди и RTFM

C++
1
2
3
4
5
6
7
8
9
10
11
12
//LoadImages.h
class Event;
 
class LoadImages {
    ttfInit(Event*);
};
 
//LoadImages.cpp
#include "Event.h"
void LoadImages::ttfInit(Event* p) {
    currentScore << p->getCurrentCounter();
}
начали с взаимного включения хедеров, а закончили глобальными статическими переменными
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
25.10.2013, 11:52  [ТС]     Взаимное включение заголовочных файлов #8
Цитата Сообщение от Jupiter Посмотреть сообщение
этот код и близко неподпадает под то что ты спрашивал в 1-м посту, короче нет времени тебе тут пересказывать книги так что давай сам иди и RTFM
Ладно, спасибо и на этом. Кстати, никто не знает, почему у меня кнопка "спасибо" пропала?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2013, 15:47     Взаимное включение заголовочных файлов
Еще ссылки по теме:

Иерархия заголовочных файлов - C++
Вопрос такой. Есть 2 заголовочных файла с классами: core.h interface.h В core.h происходит #include interface.h В...

Подключение заголовочных файлов - C++
Итересует меня вопрос : нужно ли при компиляции программ оставлять только нужные хэдеры ? т.е. их минимальное кол-во для корректной...

Подключение заголовочных файлов. - C++
У меня есть заголовочный файл: ...\1\2\file.h. в папке &quot;1&quot; есть file2.h. Как подключить к &quot;file.h&quot; &quot;file2.h&quot;?

Подключение заголовочных файлов - C++
Здравствуйте. Возникают ошибки при компиляции проекта: 1. Указывает на указатель: 2. Указывает на указатель и коллекцию указателей: ...

Подключение сторонних заголовочных файлов - C++
есть 2 репозитория с моим проектом, и с файлами которые пишутся для нескольких проектов, можно ли подключить их не перенося в мой проект?...


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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17462 / 5700 / 361
Регистрация: 30.03.2009
Сообщений: 15,639
Записей в блоге: 26
25.10.2013, 15:47     Взаимное включение заголовочных файлов #9
Цитата Сообщение от Jupiter Посмотреть сообщение
этого не нужно делать, достаточно
C++
1
2
3
4
5
6
7
8
9
10
11
//LoadImages.h
class Event;
 
class LoadImages {
    ttfInit(Event*);
};
 
//LoadImages.cpp
void LoadImages::ttfInit(Event* p) {
    currentScore << p -> getCurrentCounter();
}
предварительного объявления в хедере
На всякий случай ссылка по теме:
Указатель на структуру - что напечатает программа
Yandex
Объявления
25.10.2013, 15:47     Взаимное включение заголовочных файлов
Ответ Создать тему
Опции темы

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