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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
paladinama
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 21
#1

Родительский и дочерний класс - C++

26.07.2013, 19:30. Просмотров 1425. Ответов 20
Метки нет (Все метки)

Всем доброго времени суток. Возникла проблема;
C++
1
2
3
4
5
//file Base.h
#include "Children.h"
class Base {
public: Children* a;
}
C++
1
2
3
4
5
//file Children.h
#include "Base.h"
class Children: public Base {
...
}
Пишет: 'Children' does not name a type
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.07.2013, 19:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Родительский и дочерний класс (C++):

Родительский и дочерний процесс - C++
Для начала код. ProcessA#include <windows.h> #include <iostream> #include <stdio.h> int main() { STARTUPINFO si;...

Реализовать класс родительский класс "Пара чисел" и класс-наследник "Комплексное число" - C++
Ткма работы создать класс pair (пара чисел); определить метод перемножения полей и операцию сложения пар (a,b)+(c,d) =(a+b,c+d)...

Используя родительский класс - C++
Используя родительский класс «РАБОЧИЙ» породить производный класс «ДИРЕКТОР». Используя классы «ФИРМА» и «ДИРЕКТОР», описать класс...

ошибки с указателем на родительский класс - C++
задание: сделать 3 класса: список, стек(списком), очередь(списком). Методы: вывод, добавление, удаление. Использовать при обращении...

Передача объекта-наследника по r-value ссылке на родительский класс - C++
Здоровеньки булы. Собственно, код: class x { protected: int a; public: x() {} x(int i) : a(i) {} x(const x&...

Простое наследование в с++. Базовый класс (AEROFLOT) и дочерний (REIS) - C++
Есть два класса: базовый (AEROFLOT) и дочерний (REIS). При компиляции у меня конструктор по умолчанию базового класса вызывается два раза....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ovner
7 / 7 / 0
Регистрация: 06.10.2012
Сообщений: 140
26.07.2013, 19:46 #2
У меня тоже такое было, помоему не хватает конструктора, попробуй напиши:
Base(){};
и во втором:
Children(){};
paladinama
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 21
26.07.2013, 19:52  [ТС] #3
Конструкторы есть, просто я их не писал. Попробовал поставить их в самый верх. Все равно эта же ошибка
Croessmah
Модератор
Эксперт CЭксперт С++
13154 / 7417 / 831
Регистрация: 27.09.2012
Сообщений: 18,254
Записей в блоге: 3
Завершенные тесты: 1
26.07.2013, 19:57 #4
Forward declaration + include quards в помощь.
А вообще не понятно зачем в базовом информация о детях...
paladinama
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 21
26.07.2013, 20:24  [ТС] #5
Ну я не знаю как по другому сделать.
У меня есть класс Base и Children. В классе Base создаю обьект Children и вызываю функции из класса Children. В классе Children есть функция которая делает напрмер 100 раз одно и то же действие, и каждый раз должна обновлять список(выводится на экран). А список то в классе Base. И вот как мне вызвать функцию обновления списка зи класса Base.
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
27.07.2013, 12:21 #6
Цитата Сообщение от ovner Посмотреть сообщение
У меня тоже такое было, помоему не хватает конструктора, попробуй напиши:
Base(){};
и во втором:
Children(){};
бред
Цитата Сообщение от paladinama Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
//file Base.h
#include "Children.h"
class Base {
public: Children* a;
} 
 
//file Children.h
#include "Base.h"
class Children: public Base {
...
}
А теперь ещё раз подумай, зачем тебе это надо. Скорее всего этого вообще не должно быть.

Ну а в качестве временной меры убери все инклуды из *.h файлов!!!!
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
27.07.2013, 12:32 #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А теперь ещё раз подумай, зачем тебе это надо.
ну а если ТС все таки это нужно, то можно таким способом сделать):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// base.h
#ifndef BASE_H
#define BASE_H
#include "Children.h"
 
class Base;
 
class Base {
public: Children* a;
};
 
#endif
 
 
 
//file Children.h
#ifndef CHILDREN_H
#define CHILDREN_H
#include "Base.h"
 
class Children: public Base {
...
};
 
#endif
не проверял, но думаю должно правильно работать
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
27.07.2013, 12:36 #8
Цитата Сообщение от BigLow Посмотреть сообщение
ну а если ТС все таки это нужно, то можно таким способом сделать):
ерунда. нужно вообще избегать взаимного инклюда заголовков. А уж взаимное включение уж точно нужно убрать!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// base.h
#ifndef BASE_H
#define BASE_H
 
class Base;
 
class Base {
public: Children* a;
};
 
#endif
 
 
 
//file Children.h
#ifndef CHILDREN_H
#define CHILDREN_H
 
class Children: public Base {
...
};
 
#endif
Но ещё раз повторю: одна из основ ООП - класс Base должен проектироваться так, что он ничего не знает о Children!
Это главное! Писать иерархию классов нужно от общего к частному. И каждый базовый класс должен быть "вещью в себе" и при появлении его потомков, в него не должны вноситься никакие изменения. ВООБЩЕ никакие!
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.07.2013, 12:39 #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// base.h
#ifndef BASE_H
#define BASE_H
 
class Children;
 
class Base {
public: 
    Children* a;
};
 
#endif
 
//file Children.h
#ifndef CHILDREN_H
#define CHILDREN_H
 
#include "Base.h"
 
class Children: public Base {
...
};
 
#endif
BigLow
27.07.2013, 12:40
  #10

Не по теме:

Почему нельзя редактировать свои сообщения? Сейчас нашел ошибку у себя в 6 строчке. И не могу исправить

C++
1
class Children;

Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
27.07.2013, 12:42 #11
Цитата Сообщение от Jupiter Посмотреть сообщение
#include "Base.h"
повторю: взаимные инклюды заголовков не нужны!
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.07.2013, 12:44 #12
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
повторю: взаимные инклюды заголовков не нужны!
взаимных инклудов там нет.
этот иклуд нужен.
иначе надо будет учитывать порядок инклудов в файле с исходниками выстрелить себе в ногу
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
27.07.2013, 12:50 #13
Цитата Сообщение от Jupiter Посмотреть сообщение
иначе надо будет учитывать порядок инклудов в файле с исходниками выстрелить себе в ногу
именно это и надо делать, а не так, чтобы один инклюд засорял срр файл ещё несколькими килобайтами зависимых инклюдов
Jupiter
27.07.2013, 12:51
  #14

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
именно это и надо делать
хеллоувордщик детектед.
я не помню что месяц назад писал, не говоря уж о том чтобы помнил какой-то порядок инклудов

Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
27.07.2013, 12:58 #15
Цитата Сообщение от Jupiter Посмотреть сообщение
хеллоувордщик детектед.
что за наезды? Ты вот не помнишь, а мне вот и не в своём коде, а очень даже в чужом коде всегда не лень посмотреть, какие конкретно зависимости нужны в срр файле.
Заголовки должны быть заголовками. И каждый раз делая инклюд нужно чётко представлять, как будет выглядеть итоговый срр файл после препроцессора.
Я уж не хочу повторять о том, что хранить в Base указатели на каких-то Children выглядит полным бредом.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2013, 12:58
Привет! Вот еще темы с ответами:

Создать иерархию классов: родительский класс "Транспорт", класс-потомок "Техосмотр транспорта" - C++
Помогите пожалуйста написать программу Родительский класс "Транспорт". Поля класса: тип транспорта, гос.номер, марка, Ф.И.О владельца,...

Родительский класс неявно влияет на значение переменной наследника - C++
Написал элементарную программу на тему наследования: есть родительский класс, у которого есть 2 наследника. У наследников есть свои...

Обязан ли дочерний класс реализовать все виртуальные функции отца? - C++
Обязан ли дочерний класс реализовать все виртуальные функции отца? Такой вот вопрос у меня на ум пришел, правильно ли? или я в чем то...

Реализовать связь классов "телефонная книга" и родительский класс "телефонный номер" - C++
Суть проблемы:есть дочерний класс "телефонная книга" и родительский класс "телефонный номер". В классе "телефонная книга" к заданной...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.07.2013, 12:58
Ответ Создать тему
Опции темы

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