Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Smiler
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 5
1

связывание 2-х классов

25.04.2013, 20:00. Просмотров 475. Ответов 8
Метки нет (Все метки)

среда Embercadero RAD Studio 2010
столкнулся с проблемой:



есть 2 класса например

Код
#ifndef Class1H
#define Class1H
#include "Class2.h"

class Class1 {
private:
	Class2* par;
}
Код
#ifndef Class2H
#define Class2H
#include "Class1.h"

class Class2 {
private:
	Class1* par;
}
при попытке скомпилировать вылетает ошибка, Type name expected, в чем моя ошибка.

мне нужно чтобы оба класса видели объявления друг друга.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2013, 20:00
Ответы с готовыми решениями:

Связывание классов
Всем привет. Подскажите, пожалуйста, как решить вот такую проблему: У меня...

Связывание классов в 1 файле
Здравствуйте! Разрабатывая программу столкнулся с проблемой... в 1 файле...

Разработать иерархию классов, демонстрирующее работу с коллекцией объектов разных классов
Задание: Разработать в соответствии с индивидуальным заданием иерархию классов...

Вынести методы из классов Panel и PictureBox (явная реализация методов базовых абстрактных классов)
Тема: Множественное наследование. Явная реализация методов базовых абстрактных...

Объекты классов не видны во вложенной функции одной из классов
Такая вот проблема. Есть функция play() класса Game, где создаются объекты...

8
metaluga145
243 / 244 / 38
Регистрация: 08.04.2013
Сообщений: 927
25.04.2013, 20:37 2
Вы в первом классе используете второй, который использует первый, который использует второй....

Понимаете что не так?
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
26.04.2013, 07:27 3
Добавить предварительное объявление класса:
class Class1; перед определением Class2 и наоборот
0
Мишутка1
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 47
26.04.2013, 08:36 4
Я новичок, но по-моему точек с запятой в конце объявления классов нет.
0
flerris
3 / 3 / 1
Регистрация: 17.08.2012
Сообщений: 145
26.04.2013, 08:48 5
Цитата Сообщение от Smiler Посмотреть сообщение

при попытке скомпилировать вылетает ошибка, Type name expected, в чем моя ошибка.

мне нужно чтобы оба класса видели объявления друг друга.
как Вам уже и сказали вы пытаетесь в первом классе сделать экземпляр второго, а во втором экземпляр первого в котором лежит экземпляр второго и тд. Это получается рекурсия. Так не правильно. Что Вы этим пытаетесь сделать?

Если Вы хотите в первом классе использовать экземпляр второго, то так
C++
1
2
3
4
5
6
7
8
#ifndef Class1H
#define Class1H
#include "Class2.h"
 
class Class1 {
private:
    Class2* par;
}
и потом в коде пользуйтесь экземпляром второго класса

Добавлено через 48 секунд
Цитата Сообщение от Мишутка1 Посмотреть сообщение
Я новичок, но по-моему точек с запятой в конце объявления классов нет.
есть
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
26.04.2013, 09:41 6
Smiler, напишите вот так:

C++
1
2
3
4
5
6
7
8
9
#ifndef Class1H
#define Class1H
#include "Class2.h"
 
class Class2; 
class Class1 {
private:
    Class2* par;
};
C++
1
2
3
4
5
6
7
8
9
#ifndef Class2H
#define Class2H
#include "Class1.h"
 
class Class1; 
class Class2 {
private:
    Class1* par;
};
Должно работать в любых комбинациях.
1
stima
495 / 345 / 93
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
26.04.2013, 09:57 7
Дополню. Если будете работать через указатель, то можно оставить форвард декларацию и убрать подключение хедеров. Уменьшит время перекомпиляции.
1
Мишутка1
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 47
26.04.2013, 11:17 8
Цитата Сообщение от flerris Посмотреть сообщение
как Вам уже и сказали вы пытаетесь в первом классе сделать экземпляр второго, а во втором экземпляр первого в котором лежит экземпляр второго и тд. Это получается рекурсия. Так не правильно. Что Вы этим пытаетесь сделать?

Если Вы хотите в первом классе использовать экземпляр второго, то так
C++
1
2
3
4
5
6
7
8
#ifndef Class1H
#define Class1H
#include "Class2.h"
 
class Class1 {
private:
    Class2* par;
}
и потом в коде пользуйтесь экземпляром второго класса

Добавлено через 48 секунд


есть
где же они есть??? вы посмотрите пожалуйста внимательно, они там отсутствуют, хотя должны быть
0
Smiler
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 5
26.04.2013, 13:00  [ТС] 9
всем спасибо. предварительное объявление класса помогло.
0
26.04.2013, 13:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2013, 13:00

Реализация отношения классов типа двунаправленная ассоциация, UML, порядок объявления классов, неполный класс
Доброго времени суток! Осваивая UML, решил реализовать отношение...

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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