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

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

25.04.2013, 20:00. Просмотров 459. Ответов 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++):

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

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

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

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

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

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

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

Понимаете что не так?
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 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
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 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
Привет! Вот еще темы с решениями:

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

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

Наследование классов. Копирование производных классов
Здравствуйте всем, у меня такой вопрос: написал код #include "stdafx.h" ...

Позднее связывание
Всем привет! Нужно сделать такую программу: используя механизм позднего...


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

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

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