Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/19: Рейтинг темы: голосов - 19, средняя оценка - 4.79
 Аватар для dimakozyr
162 / 29 / 3
Регистрация: 17.08.2013
Сообщений: 560

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

25.10.2013, 10:56. Показов 4013. Ответов 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, т.е. взаимное включение будет.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.10.2013, 10:56
Ответы с готовыми решениями:

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

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

Про добавление заголовочных файлов в заголовочных файлах
В который раз эта вещь засовывает мозги в блендер! Я про то, что не могу однозначно запомнить (основываясь на моих знаниях о директиве...

8
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
25.10.2013, 11:00
Цитата Сообщение от dimakozyr Посмотреть сообщение
т.к. Event.h уже инклудит файл LoadImages.h, т.е. взаимное включение будет.
Не будет в каждом новом файле если ты что то используешь, то его нужно обязательно подключать.
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
25.10.2013, 11:02
Цитата Сообщение от 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();
}
предварительного объявления в хедере
0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
25.10.2013, 11:02
dimakozyr, почему у ttfInit нет имени типа?
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
25.10.2013, 11:03
Ты должен в файле Event.h делать защиту от повторного включения, да там у тебя по идее должны быть только объявления функций переменных, а объявлений может быть сколько угодно, главное что бы было только одно определение.
0
 Аватар для dimakozyr
162 / 29 / 3
Регистрация: 17.08.2013
Сообщений: 560
25.10.2013, 11:42  [ТС]
Цитата Сообщение от 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 {};
то выдает, пропущена точка с запятой, а это, как я понимаю, потому что не определен базовый класс
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
25.10.2013, 11:48
Цитата Сообщение от 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();
}
начали с взаимного включения хедеров, а закончили глобальными статическими переменными
0
 Аватар для dimakozyr
162 / 29 / 3
Регистрация: 17.08.2013
Сообщений: 560
25.10.2013, 11:52  [ТС]
Цитата Сообщение от Jupiter Посмотреть сообщение
этот код и близко неподпадает под то что ты спрашивал в 1-м посту, короче нет времени тебе тут пересказывать книги так что давай сам иди и RTFM
Ладно, спасибо и на этом. Кстати, никто не знает, почему у меня кнопка "спасибо" пропала?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
25.10.2013, 15:47
Цитата Сообщение от 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();
}
предварительного объявления в хедере
На всякий случай ссылка по теме:
Указатель на структуру - что напечатает программа
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.10.2013, 15:47
Помогаю со студенческими работами здесь

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

Подключение заголовочных файлов и файлов реализации
Здравствуйте,при создании класса в visual studio руками не компилится проект,при создании через add class все работает,для примера написал...

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru