Ответ 1
Переименуйте main.m на main.mm. Это сработало для меня.
код:
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() {}
};
Изучение opengles из книги для программирования 3d iphone и использует этот пример кода, но книга предназначена для xcode 3.x
Как-то я чувствую себя чем-то с xcode 4....
EDIT:
Возникает фактическая ошибка:
/Пользователи/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
Я пробовал компиляцию для приложения С++, и все получилось просто отлично.... Точно так же компиляция с тестовым файлом main.mm тоже работала нормально
heres the actual project, lemme знаю как безумный я действительно:
[Удалено, если я потерял файл]
Переименуйте main.m на main.mm. Это сработало для меня.
Если вы используете Xcode 4, попробуйте изменить имя файла "AppDelegate.m" на "AppDelegate.mm". Это работает для меня.
Изменение имени файла "AppDelegate.m" на "AppDelegate.mm". Это правильно!
Я переместил строку #import "IRenderingEngine.hpp" из файла GLView.h в GLView.mm - это помешало ему импортироваться в файлы main.m и HelloArrowAppDelegate.m, когда они были скомпилированы, и ограничил импортировать в файл .mm, который может обрабатывать С++.
Мне также пришлось сделать пару других исправлений для ошибок, которые я вводил при вводе кода, поэтому извиняюсь, если это не единственное, что нужно сделать, но это может помочь тем, у кого есть подобные проблемы!
если вы вызываете файлы С++ (даже если вы их импортируете), вам нужно изменить файл .m, который вызывает его .mm
Это просто глупое предположение, поскольку я никогда не пытался компилировать что-то со словом virtual в компиляторе C... но есть ли вероятность, что вы пытались скомпилировать этот код на С++ как код C? Единственная причина, по которой я могу думать, что компилятор не понял бы ключевое слово virtual.
Заголовок < stdlib.h > не подходит для использования в программе на С++. Когда я заменил его на С++-версию библиотеки C stdio <cstdlib> то ваш код скомпилирован для меня.