Почему я получаю ошибку «ошибка: неизвестное имя типа« виртуальный »» при попытке скомпилировать этот код? - PullRequest
11 голосов
/ 18 ноября 2011

Код:

struct IRenderingEngine {
    virtual void Initialize(int width, int height) = 0;
    virtual void Render() const = 0;
    virtual void UpdateAnimation(float timeStep) = 0;
    virtual void OnRotate(DeviceOrientation newOrientation) = 0;
    virtual ~IRenderingEngine() {}
};

Изучение открытий из книги по программированию для 3d iphone и использование этого примера кода, но книга предназначена для xcode 3.x

Почему-то мне кажется, что эточто-то с xcode 4 ....

РЕДАКТИРОВАТЬ:

Вот фактическая ошибка:

/ Users / Dan / Documents / opengles / Hello Arrow / Hello Arrow / IRenderingEngine.hpp: 27: 2: ошибка: неизвестное имя типа 'virtual' [1]

И это законно - все, что требуется, чтобы не скомпилировать, абсолютно никаких других файлов.(Да, я попытался скомпилировать буквально с main.m и этим hpp-файлом)

Он распознает hpp-файл как заголовочный файл cpp, хотя, если я пытаюсь добавить его в скомпилированные файлы, он говорит, что"нет правила для обработки файла '$ (PROJECT_DIR) / Hello Arrow / IRenderingEngine.hpp' типа sourcecode.cpp.h для архитектуры i386", поэтому я действительно понятия не имею, что происходит

Обратите внимание, что я скомпилировалсо значением main.m я скомпилировал другое приложение, основанное на Cocoa / Foundation

Я попытался скомпилировать приложение для c ++, и все прошло нормально ... Аналогично, компиляция с тестовым файлом main.mm тоже работала нормально

вот реальный проект, дай мне знать, насколько я безумный:

[Удалено, учитывая, что я потерял файл]

Ответы [ 7 ]

22 голосов
/ 18 ноября 2011

Пожалуйста, переименуйте main.m в main.mm.Это сработало для меня.

2 голосов
/ 17 ноября 2012

Я переместил строку #import "IRenderingEngine.hpp" из файла GLView.h в файл GLView.mm - это предотвратило его импорт в файлы main.m и HelloArrowAppDelegate.m при их компиляции - и ограничил импортировать в файл .mm, который может обрабатывать C ++.

Я также должен был сделать несколько других исправлений для ошибок, которые я внес, вводя код - таким образом, извинения, если это было не единственное, что нужно было сделать, но это могло бы помочь тем с подобными проблемами!

2 голосов
/ 14 апреля 2012

Изменение имени файла "AppDelegate.m" на "AppDelegate.mm".Это правильно!

2 голосов
/ 28 декабря 2011

Если вы используете Xcode 4, попробуйте изменить имя файла «AppDelegate.m» на «AppDelegate.mm». У меня это работает.

1 голос
/ 03 апреля 2014

если вы вызываете файлы C ++ (даже если вы только импортируете их), вам нужно изменить файл .m, который вызывает его, на .mm

0 голосов
/ 18 ноября 2011

Заголовокне подходит для использования в программе на C ++.Когда я заменил его на c ++ версию библиотеки stdio C * , тогда ваш код скомпилирован для меня.

0 голосов
/ 18 ноября 2011

Это просто глупое предположение, так как я никогда не пытался компилировать что-либо со словом virtual в компиляторе C ... но есть ли шанс, что вы пытались скомпилировать этот код C ++ как код C? Это единственная причина, по которой я могу думать, что компилятор не понимает ключевое слово virtual.

...