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

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

Восстановить пароль Регистрация
 
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
27.08.2011, 16:48     Описание двух "пересекающихся" классов #1
Как сделать два класса в которых методы используют параметры с типами друг-друга
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++ Дано целое число , лежащие в диапазоне от -999 до 999.Вывести строку - словесного описание данного числа вида "отрицательное двухзначное число", "отри
C++ Проблема с перегрузкой операторов "+" и "+=" для классов Point и Circle
Перезагрузка оператора "=" для двух классов C++
Наследование классов "Заявка", "Техническое задание", "Техническое предписание" C++
C++ Иерархия классов "люстра", "лампа"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
27.08.2011, 16:50     Описание двух "пересекающихся" классов #2
Ну так добавь в самое начало
C++
1
class c2;
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 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++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
27.08.2011, 17:25     Описание двух "пересекающихся" классов #4
Цитата Сообщение от silent_1991 Посмотреть сообщение
skvor, объявить c2 до c1.
Кажется, не получится. Ведь по значению передаётся объект, а не по ссылке или указателю.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
27.08.2011, 17:42     Описание двух "пересекающихся" классов #5
Deviaphan, студия компилит...
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 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
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
27.08.2011, 18:24     Описание двух "пересекающихся" классов #8
skvor, главное, что компилятор понимает, что теоретически такая сущность может иметь место.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
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     Описание двух "пересекающихся" классов
Еще ссылки по теме:

ткните мордой плз на описание конструкций типа defect?"brak":"goden" C++
C++ Описание классов. Класс "Угол"
C++ Описание классов. Классы "Шар" и "Ящик для шаров"

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

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

Метки
классы, методы, типы
Опции темы

Текущее время: 14:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru