Заблокирован
|
|||||||||||
1 | |||||||||||
Рекурсивный include, как грамотней сделать?19.03.2014, 21:45. Показов 4131. Ответов 16
Метки нет (Все метки)
Привет! Что - то я совсем онубел Есть два класса, вот их хэдэры:
0
|
19.03.2014, 21:45 | |
Ответы с готовыми решениями:
16
Forward declaration и рекурсивный include Как грамотней писать код? Как грамотней писать объявление указателя? Работа с файлами в C# с исп. библиотек #include <stdio.h> #include <stdlib.h> #include <math.h> #include <io.h> |
126 / 125 / 62
Регистрация: 07.09.2013
Сообщений: 343
|
|
19.03.2014, 21:50 | 2 |
Можно использовать конструкцию #ifndef #define #endif
0
|
18826 / 9829 / 2403
Регистрация: 30.01.2014
Сообщений: 17,265
|
|
19.03.2014, 22:03 | 6 |
ФараоН, слушай alsav22, он дело говорит.
0
|
Модератор
13502 / 10754 / 6409
Регистрация: 18.12.2011
Сообщений: 28,698
|
||||||
19.03.2014, 22:05 | 7 | |||||
Что-то Вы проблему создали на пустом месте.
1. Есть файл base.h - описание базового класса. 2. Есть файл child.h производного класса, в него включаем строку
то подключаем base.h, если производный (или оба), то подключаес child.h
0
|
Заблокирован
|
||||||
19.03.2014, 22:15 [ТС] | 8 | |||||
Вот я олух, забыл! Спасибо!
Но, class Child надо использовать не в место, а в дополнение... Иначе при попытке создания этого классы вылетит - но апроритэйт дефаул конструктор, т.к. компилятор в бэйзе же понятия не имеет, что за чайлда ты как бы объявляешь ...
тут как бы нужен указатель на производный класс в базовом классе ...
0
|
Заблокирован
|
||||||
19.03.2014, 22:20 [ТС] | 10 | |||||
да, верно, я чушь написал, т.к. с H файлом в бейзе опять pragma once не даст два раза включиться как бы и будет тоже самое, НО, если писать просто в base.h строку class Child; как предлагалось выше, то получается как бы ерунда, тоесть компилятор вообще не знает в base.h, что за класс как бы ты объявляешь, откуда он может знать, что где - то есть файл, в котором объявлен Child...
По этому, в при попытке создать объект класса Child, например, в конструкторе класса Base:
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
19.03.2014, 22:45 | 11 | |||||
В файле, где этот конструктор, какие инклуды сделаны?
???
Реализация конструктора по умолчанию Child имеется?
1
|
Заблокирован
|
||||||||||||||||||||||||||
19.03.2014, 22:49 [ТС] | 12 | |||||||||||||||||||||||||
1. Наверное не целесообразно в базовом классе делать указатели на дочерние классы, лучше уж делать указатели на самого себя, тоесть на Base, а где надо - приводить их к чему надо 2. Если уж так надо сделать, лучше все инклюды выносить вообще в отдельный файл и подключать везде только его и заодно сделать этот файл прекомпайл хэдэром ... Добавлено через 3 минуты ну вот как бы всё:
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
19.03.2014, 23:22 | 13 | |||||
Сообщение было отмечено ФараоН как решение
Решение
1
|
Модератор
13502 / 10754 / 6409
Регистрация: 18.12.2011
Сообщений: 28,698
|
|
20.03.2014, 11:21 | 17 |
Прошу обратить особое внимание именно на это!!!!
Если предполагается использование методов производного класса, то это надо делать исключительно через виртуальные функции.
0
|
20.03.2014, 11:21 | |
20.03.2014, 11:21 | |
Помогаю со студенческими работами здесь
17
Как правильно сделать include Как сделать include(меню),во всех файлах пректа? Как сделать через цикл whail или repeat until рекурсивный алгоритм? #include<iostream>// подключение библиотек #include <conio.h> #include <climits> Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |