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

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

Войти
Регистрация
Восстановить пароль
 
Smiler
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 5
#1

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

25.04.2013, 20:00. Просмотров 382. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос связывание 2-х классов (C++):

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

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

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

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

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

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

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

Понимаете что не так?
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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 / 0
Регистрация: 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
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
473 / 322 / 30
Регистрация: 22.03.2011
Сообщений: 1,047
Завершенные тесты: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2013, 13:00
Привет! Вот еще темы с ответами:

Наследование классов. Копирование производных классов - C++
Здравствуйте всем, у меня такой вопрос: написал код #include "stdafx.h" class A //Создаем класс А { int mA; ...

Связывание библиотек - C++
Допустим есть решение из 4 проектов- Common, A , B и Program. Common содержит некие общие классы и интерфейсы ( например работа с...

Динамическое связывание - C++
Здравствуйте! Возник вопрос. Если у нас есть if и в теле if создаётся переменная, то какое в данном случае связывание? Я предполагаю, что...

Связывание файлов - C++
Здравствуйте, помогите пожалуйста решить вопрос. Была программа, содержащая класс. Хочу сделать так, чтобы класс был в отдельном файле....


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

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

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