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

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

25.04.2013, 20:00. Просмотров 881. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.04.2013, 20:00
Ответы с готовыми решениями:

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

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

Связывание сигнала и слота из разных классов
Доброго времени суток. Сделал сигнал в одном классе и слот для этого сигнала, который определён...

Создание и связывание двух классов.
Ludi dobrie:), ne pomoshete silkami ili opitnim sowetom po sledujushemu? Mne s klassami osobo...

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

Понимаете что не так?
0
:)
Эксперт С++
4763 / 3257 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
26.04.2013, 07:27 3
Добавить предварительное объявление класса:
class Class1; перед определением Class2 и наоборот
0
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 47
26.04.2013, 08:36 4
Я новичок, но по-моему точек с запятой в конце объявления классов нет.
0
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
:)
Эксперт С++
4763 / 3257 / 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
498 / 348 / 93
Регистрация: 22.03.2011
Сообщений: 1,107
26.04.2013, 09:57 7
Дополню. Если будете работать через указатель, то можно оставить форвард декларацию и убрать подключение хедеров. Уменьшит время перекомпиляции.
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
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 5
26.04.2013, 13:00  [ТС] 9
всем спасибо. предварительное объявление класса помогло.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.04.2013, 13:00

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Связывание значений полей и свойств объектов разных классов
Здравствуйте. Нужен совет. Имеется переменная типа SolidColorBrush. Есть объект другого класса, и я...

Разработать систему классов по заданной теме. Обеспечить соответствующую функциональность классов
Блин, люди, помоги с задачей :( А то зачет не поставят :( Разработать систему классов по...

Массив разных классов. Как добратся до всех полей этих классов?
Все классы имеют общего предка. Экземпляры этих классов запихнуты в один массив нужно както...

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

На основе указанных классов создать набор классов с использованием множественного наследования
Создать базовый класс «Транспорт» и производные от него классы «Автомобиль», «Поезд», «Самолет»....

Автоматическая генерация классов С ++ с UML диаграмм классов. Наследование в с++. Абстрактные классы. WhiteStarUML
Создать классовую модель(желательно в WhiteStarUML), которая включает в себя абстрактный класс...


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

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

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