|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||||||
Спрятать часть интерфейса класса17.01.2016, 20:16. Показов 1878. Ответов 20
Метки нет (Все метки)
Добрый вечер,
как предоставить возможность только классу Initer создавать и инициализировать класс A и не иметь в интерфейсе А лишних методов. Сейчас проблема в том, что в обоих классах есть указатели на друг друга(friend не сработает), а forward declaration скроет интерфейс и не позволит в Foo.cpp подключить Initer.h, без A.h и видить все интерефейсы классов синглтонов hello world пример
0
|
||||||
| 17.01.2016, 20:16 | |
|
Ответы с готовыми решениями:
20
Спрятать указатель на функцию класса в map и вызвать из другого объекта Отделение интерфейса класса от реализации Отделение интерфейса класса от его реализации |
|
bmstu-team
|
||||||
| 17.01.2016, 20:24 | ||||||
|
Не совсем понял суть вопроса, но в случаях ссылания друг на друга используется предопределение.
И если все таки отвечать на вопрос как предоставить возможность только классу Initer создавать и инициализировать класс A и не иметь в интерфейсе А лишних методов. Просто создайте поле класса A (не делая A синглтоном) и набор методов для работы с ним (не дублируя их у A), у вас есть синглтон, который будет включать этот A, так что еще нужно? Прошу прощения, я действительно не совсем до конца понял, что именно нужно.
0
|
||||||
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||||||||||||||||||||||||||
| 17.01.2016, 20:47 | ||||||||||||||||||||||||||
|
Что-то я не понял вопроса, но
:A.h Кликните здесь для просмотра всего текста
A.cpp Кликните здесь для просмотра всего текста
Initer.h Кликните здесь для просмотра всего текста
Initer.cpp Кликните здесь для просмотра всего текста
И сингелтон в сингелтоне - это излишне, как отметил antonboom. Да и вообще сингелтоны - маленькое зло растущее вместе с проектом
0
|
||||||||||||||||||||||||||
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||||||
| 17.01.2016, 20:53 [ТС] | ||||||
|
Первый раз вижу такую конструкцию
0
|
||||||
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||
| 17.01.2016, 21:06 | ||
|
0
|
||
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
| 17.01.2016, 21:12 [ТС] | |
|
Не компилируется xD
0
|
|
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
|
| 17.01.2016, 21:16 | |
|
1
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||||||||||||||||||||||||||
| 17.01.2016, 21:29 | ||||||||||||||||||||||||||
|
rikimaru2013,
main.cpp
initer.h
initer.cpp
a.h
a.cpp
Собственно непонятно в чем проблема. Все работает.
1
|
||||||||||||||||||||||||||
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|||||||
| 17.01.2016, 21:33 [ТС] | |||||||
|
Не пойму почему уточнения namespace не надо тут ) Убрал
NS_A:: всё заработало - откуда блин он знает какой initer вдруг там в глобальной области еще один такой. что за бред)
0
|
|||||||
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||
| 17.01.2016, 21:44 | ||
![]() Добавлено через 1 минуту Собственно если не желаете напрягаться можете, в h файлах лишний forward declaration поместить перед хедер гуардом, и включать всё куда пожелаете.
0
|
||
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
| 17.01.2016, 21:46 [ТС] | |
|
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||||||||||||
| 17.01.2016, 21:50 | |||||||||||||
1
|
|||||||||||||
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
|||||||
| 17.01.2016, 21:53 | |||||||
Сообщение было отмечено rikimaru2013 как решение
Решение![]() + неймспейс для friend'a. Кликните здесь для просмотра всего текста
1
|
|||||||
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||
| 17.01.2016, 21:54 [ТС] | ||
|
Но по сути я знал, что если класс в A::B::C:: уже не значит что он видит все классы в A::, A::B::, при подключ их .h без уточнения, тоже самое в обратную - класс A:: не видит класс A::B::C при подкл. Или видит?(
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|
| 17.01.2016, 21:56 | |
Сообщение было отмечено rikimaru2013 как решение
Решение
rikimaru2013, я выше пример совсем по-другому оформил. Сделал бы ты так же - проблем бы не знал. Вот, исправил.
1
|
|
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
|||||||
| 17.01.2016, 22:00 | |||||||
|
А ещё можно писать абсолютный путь к классу и не лениться ![]() И пора вам батенька отдохнуть ![]() Масло масляное уже писать начали: Кликните здесь для просмотра всего текста
1
|
|||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||||||
| 17.01.2016, 22:01 | |||||||
1
|
|||||||
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||||||
| 17.01.2016, 22:08 | ||||||
|
Мой мир перевернулся
![]() DrOffset, У меня в gcc ваш пример не собрался. Желает следующее:
0
|
||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 17.01.2016, 22:13 | ||
|
Который в архиве? Если он, то я его быстро правил, возможно что-то упустил. Сейчас сам попробую.
0
|
||
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||
| 17.01.2016, 22:20 | ||
|
0
|
||
| 17.01.2016, 22:20 | |
|
Помогаю со студенческими работами здесь
20
Странный SIGSEGV, или что зависит от порядка написания интерфейса класса Связный список как часть друго класса Унаследоваться от базового класса и переопределить часть его данных Отделение интерфейса от реализации класса: компиляция кода реализации Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|