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

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

Войти
Регистрация
Восстановить пароль
 
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
#1

Описание двух "пересекающихся" классов - C++

27.08.2011, 16:48. Просмотров 907. Ответов 10

Как сделать два класса в которых методы используют параметры с типами друг-друга
C++
1
2
3
4
5
6
7
8
9
10
11
12
class c1
{ public:
    int param;
    int method(c2 param);
};
class c2
{ public:
    int param;
    int method(c1 param) { return param.param; }
};
 
int c1::method(c2 param) { return param.param; }
в четвёртой строке c2 "ещё" не известен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2011, 16:48     Описание двух "пересекающихся" классов
Посмотрите здесь:

Составить описание класса "время" C++
C++ Описание класса "Студенческая группа"
C++ Помогите придумать несложную задачку по теме "Шаблоны классов"
C++ Описание объекта "Куб". Нахождение его площади и объема
"undefined reference" при инклюде внешних классов/библиотек C++
Дать каждому элементу массива "описание" C++
Перезагрузка оператора "=" для двух классов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,989
27.08.2011, 16:50     Описание двух "пересекающихся" классов #2
Ну так добавь в самое начало
C++
1
class c2;
silent_1991
Эксперт С++
4956 / 3032 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.08.2011, 16:51     Описание двух "пересекающихся" классов #3
skvor, объявить c2 до c1.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class c2;
 
class c1
{ public:
    int param;
    int method(c2 param);
};
class c2
{ public:
    int param;
    int method(c1 param) { return param.param; }
};
 
int c1::method(c2 param) { return param.param; }
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
27.08.2011, 17:25     Описание двух "пересекающихся" классов #4
Цитата Сообщение от silent_1991 Посмотреть сообщение
skvor, объявить c2 до c1.
Кажется, не получится. Ведь по значению передаётся объект, а не по ссылке или указателю.
silent_1991
Эксперт С++
4956 / 3032 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.08.2011, 17:42     Описание двух "пересекающихся" классов #5
Deviaphan, студия компилит...
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
27.08.2011, 18:17     Описание двух "пересекающихся" классов #6
Цитата Сообщение от silent_1991 Посмотреть сообщение
Deviaphan, студия компилит...
По идее странно. Ведь размер не известен...
Или потому что реализация уже после объявления класса с2.
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
27.08.2011, 18:20  [ТС]     Описание двух "пересекающихся" классов #7
Спасибо, работает. Ещё б кто объяснил, в чём тайный смысл этого. Ведь по сути
C++
1
class c2;
ничего не описывает, или это просто некая гарантия того, что позже будет?
При прохождении компилятором 4 строки всё равно ничего не известно о свойствах передаваемого аргумента.
silent_1991
Эксперт С++
4956 / 3032 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.08.2011, 18:24     Описание двух "пересекающихся" классов #8
skvor, главное, что компилятор понимает, что теоретически такая сущность может иметь место.
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,989
27.08.2011, 18:26     Описание двух "пересекающихся" классов #9
Цитата Сообщение от skvor Посмотреть сообщение
ничего не описывает, или это просто некая гарантия того, что позже будет?
Это указывает компилятору, что идентификатор c2 является типом.
Цитата Сообщение от skvor Посмотреть сообщение
При прохождении компилятором 4 строки всё равно ничего не известно о свойствах передаваемого аргумента.
А в этом месте пока ничего и не надо знать. Знать надо к моменту определения реализации этой функции.
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
27.08.2011, 18:51  [ТС]     Описание двух "пересекающихся" классов #10
Спасибо. Перенес тело method прямо в описание c1 компилятор сразу выдал аж две ошибки.
test.cpp:34: error: 'param' has incomplete type
test.cpp:29: error: forward declaration of 'struct c2'
Вот с 34-ой строкой
C++
1
int method(c2 param){ return param.param; }
всё понятно - невозможно скомпилировать функцию без реального знания типа.
А почему ошибка в 29-ой (class c2;) от того, что изменили 34-ую?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2011, 18:53     Описание двух "пересекающихся" классов
Еще ссылки по теме:

C++ Перегрузка оператора "<<" для вывода пользовательских классов
C++ Иерархия классов "люстра", "лампа"
C++ Описание классов. Класс "Угол"
C++ Построить описание класса "Органзация"
C++ Реализовать иерархию классов "Университет и его сотрудники"

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

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,989
27.08.2011, 18:53     Описание двух "пересекающихся" классов #11
Ну это компилятор просто показал место, откуда взялся этот незавершённый тип. Подсказка, типа
Yandex
Объявления
27.08.2011, 18:53     Описание двух "пересекающихся" классов
Ответ Создать тему
Опции темы

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