![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: 3 Всего: 3 |
Вобщем, есть класс:
Я хочу сделать так, чтобы этот класс бы абстрактным, для этого нужно хотя бы у одной функции написать "= 0;" Но у меня таких функций нет, т.к единственная функция someNonVirtualFunction() не виртуальная и если бы даже она была виртуальной я не хочу делать её чисто виртуальной. Поэтому я пишу virtual ~Class() = 0; чтобы указать абстрактность класса. Но такой код не компилируется, т.к нужно написать тело ~Class(), пусть и пустое. И вот вопрос, где мне его написать, если напишу в хэдэре, линкер будет ругаться, т.к при включении заголовка в разные модули будет ошибка(тело для одной функции написано несколько раз). Другой вариант - вынести в cpp, чего тоже делать не хочется, т.к Class - это интерфейс, следовательно реализации для него быть не должно, cpp меня не устраивает. В Visual C++ можно написать так: virtual ~Class() = 0 {}. И тогда всё прокатит, но GCC не понимает такой синтаксис, а я пишу кроссплатформенное приложение, не подскажете как мне быть ? -------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
Daevaorn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
А зачем класс-интерфейс без виртуальных функций?!
Даже для чисто виртуальных функций можно писать тело. Здаётся мне, что ты хочешь перехитрить сам себя. Всё должно работать нормально. |
||||
|
|||||
Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: 3 Всего: 3 |
Daevaorn, я немного не так выразился, это не интерфейс, но если бы даже он и был интерфейсом проблему не решить.
Я знаю что для чисто вирт. функции можно написать тело, но мне это не нужно.
Нет, этот синтаксис GCC не понимает. Вобщем, всё что мне нужно, это чтобы класс был абстрактным и не нужно было писать cpp для него. -------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: 3 Всего: 3 |
Спасибо огромное!!! + в репутацию
![]() Добавлено @ 16:33 А нет, не выйдет, Админ почему-то запретил мне менять репутацию других пользователей. Провинился видимо ;) -------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
А зачем inline? Виртуальные ф-ции навряд ли будут на деле inline'ными.
Поставил. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
(перечитал сообщения ещё раз) Извиняюсь, туплю. Пропустил что имелось в виду написание реализации в заголовочном файле, а не в .cpp -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: 3 Всего: 3 |
Неа, всё равно не могу =( Добавлено @ 21:39 А, понял, ты за меня поставил =) Добавлено @ 21:40 Интересно, а почему я сам не могу этого делать, я просто давно не был на этом форуме, тут новые правила ? -------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |