2015-07-03 3 views
0

virtual void doEventLoop (char volatile * watchVariable);Использовать изменчивый параметр внутри виртуальной функции

Я пытался реализовать выше метод, и он дал мне ошибку (Говорит, что это является абстрактным)

Так без использования летучего я могу быть в состоянии скомпилировать его успешно. Где проблема?

+0

Вы не можете использовать 'volatile' в аргументе, который вы передаете функции !!! В любом случае это не имеет смысла, поскольку 'volatile' предназначен для указания компилятору, что эта переменная может меняться где-то вне функции. –

+0

На самом деле я столкнулся с этой проблемой при компиляции live555 liveMedia. – Shamendra

+0

«Говорит, что это абстрактно». Говорит *, что * является абстрактным? Когда он это говорит? Для какого кода? – AnT

ответ

0

Ваше описание, если проблемы не хватает, мягко говоря.

Но из того, что вы предоставили до сих пор, я предполагаю, что этот метод должен переопределить чистый виртуальный метод в каком-то базовом классе. В базовом классе подпись метода не имеет этого volatile. Это означает, что вы не можете просто добавить это volatile. Если вы добавите volatile, вы объявите совершенно другой виртуальный метод, который не переопределяет тот из базового класса. Базовый метод остается неперекрываемым (т. Е. Чистым), и класс остается абстрактным.

+0

Его там также в заголовке. – Shamendra

+0

@Shamendra: Если 'volatile' есть и в базовом классе, то то, что вы описываете, звучит как какая-то необъяснимая магия. Там должно быть что-то еще, о чем вы нам не говорите. – AnT

+0

На самом деле это код live555. Я удалил эту переменную из чистой виртуальной функции и других реализаций. Итак, после этого он может быть скомпилирован. – Shamendra