2013-03-31 2 views
0

Я пытаюсь сделать это чисто виртуальный метод:Чистый виртуальный метод, возвращающий объект?

virtual MonLaser& getLaser() = 0; 

Но я получаю все виды ошибок:

Error 6 error C2143: syntax error : missing ';' before '&' 
Error 5 error C2253: 'MonMartien::getLaser' : 
    pure specifier or abstract override specifier only allowed on virtual function 
Error 13 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 

Error 7 error C2433: 'MonMartien::MonLaser' : 'virtual' not permitted on data declarations 

мне нужно делать чисто виртуальный метод, или же я могу» t доступ к моим Laser. У тебя есть идеи?

+0

Позвольте мне глупый вопрос, является ли «MonLaser» типом объекта? Если это так, попробуйте вернуть «указатель» вместо «ссылки». –

+4

попробуйте включить минимальный, полный пример, который демонстрирует проблему. –

+0

Да, MonLaser является объектом MonMartien. Я попробую, но почему это сработает? – 2013-03-31 16:46:48

ответ

2

Узнав, что метод возвращает пользовательский тип из класса MonMartien Теперь у меня другая теория.

Вы видите, это сообщение об ошибке предполагает, что тип неизвестен во время компиляции. Убедитесь, что у вас есть ваше объявление MonLaser ПЕРЕД декларацией MonMartien. Если у вас есть оба в том же заголовке, убедитесь, что вы положили объявление MonLaser выше объявления MonMartien. Если он находится в отдельном файле, обязательно включите заголовочный файл.

Кроме того, убедитесь, что объявление НЕ находится внутри класса, так как тогда тип был бы невидимым и тем самым недоступным для кого-либо вне класса.

По существу все сводится к: Где MonLaser определено?

+0

Возвращение ссылки должно работать так же, как возврат указателя ... – Tomek

+0

@Tomek Согласен, я только что заметил ошибку в моем процессе мышления. –

+0

Нет, нет! MonLaser находится в MartienJiggle, подклассе MonMartien. – 2013-03-31 17:09:06

Смежные вопросы