当试图编译这段代码时,为什么我会得到错误“error:unknown type name'virtual'”?

码:

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编程的书中学习opengles,它使用这个示例代码,但是本书是针对xcode 3.x的

不知何故,我觉得它与xcode 4的东西….

编辑:

下面是实际的错误:

/ Users / Dan / Documents / opengles / Hello Arrow / Hello Arrow / IRenderingEngine.hpp:27:2:error:unknown type name'virtual'[1]

而合法的是所有它不能编译,绝对没有其他文件。 (是的,我试着编译一个main.m和这个hpp文件)

它是识别hpp文件作为一个cpp头文件,但如果我尝试将它添加到编译文件它说:“没有规则来处理文件'$(PROJECT_DIR)/你好箭头/ IRenderingEngine.hpp'的typessourcecode.cpp .h为架构i386“所以我真的不知道是怎么回事

请注意,我用main.m编译意味着我编译了另一个基于Cocoa / Foundation的应用程序

我试着编译一个C ++应用程序,一切正常。….同样编译一个main.mmtesting文件也工作得很好

inheritance人的实际项目,让我知道我真的很疯狂:

[考虑到我丢失了文件]

请将main.m重命名为main.mm. 这对我有效。

如果您使用Xcode 4,请尝试将文件“AppDelegate.m”的名称更改为“AppDelegate.mm”。 这个对我有用。

将文件“AppDelegate.m”的名称更改为“AppDelegate.mm”。 这是正确的!

我从GLView.h文件中将#import“IRenderingEngine.hpp”行移动到了GLView.mm–这防止了它在编译时被导入到main.m和HelloArrowAppDelegate.m文件中 – 并且将导入限制在.mm文件,可以处理C ++。

我还必须对我在input代码时引入的错误进行一些其他修复 – 所以如果不是唯一需要完成的事情,那么可能会造成困难!

如果您调用C ++文件(即使只导入它们),则需要将调用该文件的.m文件更改为.mm

这只是一个愚蠢的猜测,因为我从来没有试过在C编译器中用虚拟字编译一些东西……但是有没有机会尝试将这个C ++代码编译为C代码? 这是我能想到编译器不理解关键字virtual的唯一原因。

头文件<stdlib.h>不适合在C ++程序中使用。 当我用c的stdio库<cstdlib>的c ++版本replace它时,那么你的代码为我编译。