0 / 0 / 0
Регистрация: 15.01.2020
Сообщений: 64
|
||||||
1 | ||||||
Не работает дружественный метод класса21.01.2020, 15:16. Показов 4369. Ответов 19
Метки нет (Все метки)
Почему такой код не работает? Работает только в случае, если весь класс сделать дружественным. В чём ошибка?
0
|
21.01.2020, 15:16 | |
Ответы с готовыми решениями:
19
Дружественный метод класса и ошибка доступа Дружественный метод Дружественный метод. Ошибка доступа к полям Дружественный оператор не видит закрытые члены класса |
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
|
|
21.01.2020, 15:31 | 2 |
0
|
0 / 0 / 0
Регистрация: 15.01.2020
Сообщений: 64
|
|
21.01.2020, 15:33 [ТС] | 3 |
0
|
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
|
||||||
21.01.2020, 16:13 | 4 | |||||
Сообщение было отмечено Farnik как решение
Решение
Это значит что ты можешь использовать только ссылки и указатели на этот класс (ну или использовать его в предварительных объявлениях функций(методов))
В твоем случае можно так:
1
|
43 / 39 / 5
Регистрация: 16.09.2019
Сообщений: 285
|
|
21.01.2020, 16:14 | 5 |
0
|
0 / 0 / 0
Регистрация: 15.01.2020
Сообщений: 64
|
|
21.01.2020, 16:22 [ТС] | 6 |
zayats80888, а почему тогда, если я весь класс сделаю дружественным, то такой проблемы нет?
Добавлено через 2 минуты БедолагаЖека, такой код Visual Studio даже не компилирует
0
|
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
|
|
21.01.2020, 16:22 | 7 |
0
|
0 / 0 / 0
Регистрация: 15.01.2020
Сообщений: 64
|
||||||
21.01.2020, 16:27 [ТС] | 8 | |||||
А в таком случае? Теперь-то класс point точно знает про метод класса вектор. Или я что-то неправильно понял?
0
|
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
|
|
21.01.2020, 16:29 | 9 |
0
|
0 / 0 / 0
Регистрация: 15.01.2020
Сообщений: 64
|
|
21.01.2020, 16:32 [ТС] | 10 |
zayats80888, можно ссылку на какую-нибудь статью на эту тему? Как-то слабо я понял этот момент
0
|
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
|
|
21.01.2020, 17:18 | 11 |
Farnik,
forward declaration incomplete type Добавлено через 43 минуты Не по теме: Farnik, пост #4 - это не решение проблемы а способ извернуться, проблема - кривая архитектура. Пересмотри в первую очередь её.
1
|
0 / 0 / 0
Регистрация: 15.01.2020
Сообщений: 64
|
|
21.01.2020, 17:29 [ТС] | 12 |
zayats80888, я хотел бы, чтобы мой класс vector, который определён ещё до класса point, хранил переменную типа point, то есть координаты вектора. Не вижу, если честно, других вариантов.
0
|
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
|
|
21.01.2020, 17:42 | 13 |
Объясни зачем ты спрятал
x y ?Добавлено через 4 минуты Ну или зачем вообще нужен класс point? В геометрическом смысле точка это вектор.
0
|
0 / 0 / 0
Регистрация: 15.01.2020
Сообщений: 64
|
|
21.01.2020, 17:45 [ТС] | 14 |
zayats80888, не то чтобы в этом всём этом был смысл. Я не так давно начал изучать ООП и сейчас просто пишу, что придёт в голову, чтобы просто понять как всё оно работает.
0
|
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
|
|
21.01.2020, 17:46 | 15 |
0
|
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|
21.01.2020, 19:33 | 16 |
В таком реализация
void vector::someMethod(point& A, point& B) должна быть после определения class vector, т.е. в самом конце.
1
|
43 / 39 / 5
Регистрация: 16.09.2019
Сообщений: 285
|
|
21.01.2020, 21:39 | 17 |
Да у него же "круговая порука": в первом френд второго, а во втором поле первого, разносить по разным файлам (хидерам и суркам), с взаимным инклудом лень, видимо, описание класса наверх кинул, что бы компиль не ругался, а компоновщик ругается
Вот такой нынче пошел студент, не нужно ему решение его загадки.... ИМХО.
0
|
0 / 0 / 0
Регистрация: 15.01.2020
Сообщений: 64
|
|
21.01.2020, 21:59 [ТС] | 18 |
БедолагаЖека, Тут ты не прав. Если тебе всё кажется очевидным, то это ещё ничего не значит. А ошибку я выделил комментарием в коде
0
|
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||||||
21.01.2020, 22:23 | 19 | |||||
Вместо шаблонов существует возможность сделать именно динамически создаваемые объекты в указателях, хотя так лучше не делать:
0
|
Вездепух
12792 / 6669 / 1795
Регистрация: 18.10.2014
Сообщений: 16,870
|
|
21.01.2020, 23:08 | 20 |
В языке С++ квалифицированные имена, т.е. имена вида
class::member , могут использоваться только для ссылки на уже ранее объявленные сущности, но не для введения новых сущностей. Поэтому как вы ни вертитесь, вы не сможете использовать имя vector::someMethod до тех пор, пока полностью не определите класс vector .P.S. Это правило не распространяется на имена вида T::member , где T является параметром шаблона, но это уже другая история.
1
|
21.01.2020, 23:08 | |
21.01.2020, 23:08 | |
Помогаю со студенческими работами здесь
20
Реализовать дружественный метод задания размерности матрицы Дружественный перегруженный оператор не может обратиться к приватной переменной класса Не работает метод класса Не работает метод класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |