![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
InfMag |
|
||||||
… ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1037 Регистрация: 21.11.2004 Репутация: нет Всего: 4 |
Доброго времени суток!
Я может недопонимаю концепт, но у меня возникла следующая загвоздка: я пишу некое приложение с использованием FMOD-либы. У меня есть класс, который будеть хранить и воспроизводить несколько звуков, каждый звук будет экземпляром класса. Реализация общения с FMOD будет вне класса абстрактна, но инициализировать новый звукопоток под каждый звук не практично и я делаю основной экземпляр класса FMOD-системы static. Но у меня возникает проблема, я не могу передать ссылку на адрес памяти от этого static экземпляра. Наглядно: Так НЕ могу:
Отчёт об ошибке:
А вот так (когда убираю static) МОГУ:
Я не могу понять, почему? Кто-нибудь может прояснить? И как реализовать то, что я пытаюсь правильно? Заранее сердечно благодарю! |
||||||
|
|||||||
InfMag |
|
|||
… ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1037 Регистрация: 21.11.2004 Репутация: нет Всего: 4 |
И кстати! хочу сразу спросить: как в конструкторе определить, что класс уже инициализирован? Чтобы инициализировать его только один раз, а следующие сконструированные классы не пытались его инициализировать?
|
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
статический дата-член в классе только объвляется.. для его определения в любом (одном) .cpp напишите
Добавлено через 2 минуты и 21 секунду
1. инициализировать не в конструкторе, а явно в маин.. 2. проверять на нуль, перед созданием 3. смотрите патерн синглетон.. |
||||
|
|||||
InfMag |
|
|||
… ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1037 Регистрация: 21.11.2004 Репутация: нет Всего: 4 |
mes, спасибо! Теперь всё получилось:
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
доп переменная не нужна.. достаточно проверки на нуль.. |
|||
|
||||
InfMag |
|
|||
… ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1037 Регистрация: 21.11.2004 Репутация: нет Всего: 4 |
mes, теперь вот так:
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
как минимум, я б проверку с инициализацией вынес в отдельную статическую функцию, которую уж вызывал бы из конструктора.. |
|||
|
||||
InfMag |
|
|||
… ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1037 Регистрация: 21.11.2004 Репутация: нет Всего: 4 |
mes, а для статической функции ведь недоступен this, к ней можно обращаться и без экземпляра класса, разве это применимо в данном контексте?
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
так fmod также статическая ![]() |
|||
|
||||
InfMag |
|
|||
… ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1037 Регистрация: 21.11.2004 Репутация: нет Всего: 4 |
mes, действительно! Спасибо!
|
|||
|
||||
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
InfMag,
Мне кажется mes прав и Вы пишете синглтон. Если мне кажется правильно и mes прав, то может лучше так:
Это более удачная конструкция, т.к. конструктор спрятан и ошибки компиляции предупредят о попытках создать еще один объект класса. |
|||
|
||||
InfMag |
|
|||
… ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1037 Регистрация: 21.11.2004 Репутация: нет Всего: 4 |
EvilsInterrupt, нет, в моём случае экземпляров класса будет несколько.
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
синглетон вместо статической фмод.. Добавлено через 4 минуты и 14 секунд т.е. вынести фмод за пределы ТикСаунд |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |