一些C++代码在一个项目中出错,并在另一个项目中编译罚款? 以下代码在ReDelngEngult.CPP:中的一个C++项目中编译精细
但如果我在Xcode 4.3.2中启动一个新项目,它会给出错误: 正在分配抽象类类型为“RenderingEngine1”的对象 定义在IRenderingEngine.hpp中 如何解决这个问题?这是它的一部分 更新:在RenderingEngine.cpp中:一些C++代码在一个项目中出错,并在另一个项目中编译罚款? 以下代码在ReDelngEngult.CPP:中的一个C++项目中编译精细,c++,xcode,C++,Xcode,但如果我在Xcode 4.3.2中启动一个新项目,它会给出错误: 正在分配抽象类类型为“RenderingEngine1”的对象 定义在IRenderingEngine.hpp中 如何解决这个问题?这是它的一部分 更新:在RenderingEngine.cpp中: 这5个函数都已定义。最后两个是虚拟的-现在都是空的这可以通过为所有纯虚拟基方法提供实现来修复 我假设RenderingEngine1继承自IRenderingEngine。所以,重写并实现 virtual void Initializ
这5个函数都已定义。最后两个是虚拟的-现在都是空的这可以通过为所有纯虚拟基方法提供实现来修复 我假设RenderingEngine1继承自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;
这可以通过为所有纯虚拟基方法提供实现来解决 我假设RenderingEngine1继承自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;
我猜,这取决于您如何使用返回的IRenderingEngine指针。当项目在一个项目中编译时,您必须已经实现了基类中所有必需的纯虚拟函数。在失败的编译中,您必须缺少一两个实现
用您提供的信息很难说为什么它会在“book”示例中编译,而不是在您的示例中编译。我将检查构建输出,以确保为这两个类编译的头文件和实现的源文件与您认为的完全相同。您可能正在使用另一个版本的IRenderingEngine,它没有所有必需的纯虚拟实现。我猜,这取决于您如何使用返回的IRenderingEngine指针。当项目在一个项目中编译时,您必须已经实现了基类中所有必需的纯虚拟函数。在失败的编译中,您必须缺少一两个实现
用您提供的信息很难说为什么它会在“book”示例中编译,而不是在您的示例中编译。我将检查构建输出,以确保为这两个类编译的头文件和实现的源文件与您认为的完全相同。您可能正在使用另一个版本的IRenderingEngine,它没有所有必需的纯虚拟实现。在阅读第一章时,我遇到了同样的问题。这非常令人沮丧 我刚刚发现你可以点击右边的红色错误信息,上面写着 正在分配抽象类类型的对象
Xcode将直接切换到IRenderingEngine.hpp文件,并以灰色显示问题所在。在阅读第一章时,我遇到了同样的问题。这非常令人沮丧 我刚刚发现你可以点击右边的红色错误信息,上面写着 正在分配抽象类类型的对象
Xcode将直接切换到该IRenderingEngine.hpp文件,并以灰色显示问题所在。它是如何在书籍示例中编译的,而不是在这里编译的。。。必须做什么?@JeremyL这本书有编译器吗?它使用项目中指定的C99file@JeremyLRenderingEngine1是否为这些功能提供了一个实现?我认为它是按照它在公开场合所说的那样:void UpdateAnimationfloat timeStep{}和void onRotateDeviceOrientation newOrientation{}下面有更长的渲染和初始化定义…为什么它在书样本中编译,而不是在这里。。。必须做什么?@JeremyL这本书有编译器吗?它使用项目中指定的C99file@JeremyLRenderingEngine1是否为这些功能提供了一个实现?我认为它是按照它在公开场合所说的那样:void UpdateAnimationfloat timeStep{}和void onRotateDeviceOrientation newOrientation{}下面有更长的渲染和初始化定义…你能提供类RenderingEngine1的定义吗?请参阅问题中的更新你能提供类RenderingEngine1的定义吗?请参阅问题中的更新是,我想知道为什么计算机没有说onRotate没有实现,因此RenderingEngine1仍然是一个虚拟类。。。所以我们必须一个接一个地找出没有实现的东西one@JeremyLonRotate与onRotate不同。@JeremyL:请注意,请确定您所使用的环境。在GCC中,您通常会遇到类似错误:无法分配派生的抽象类型的对象,因为以下虚拟函数在Base中是纯的:virtual void Base::bar您检查了构建的完整输出了吗?你能把编译器的冗长程度调大些吗?提高警告级别?使用不同的编译器作为交叉引用?我刚刚尝试了GNU99,它是相同的错误消息。。。哦,好吧。。。是的,我认为它可能是聪明的,至少给出一个警告,该类没有完全实现。。。这个
re根本不是警告。是的,我想知道为什么计算机没有说onRotate没有实现,因此RenderingEngine1仍然是一个虚拟类。。。所以我们必须一个接一个地找出没有实现的东西one@JeremyLonRotate与onRotate不同。@JeremyL:请注意,请确定您所使用的环境。在GCC中,您通常会遇到类似错误:无法分配派生的抽象类型的对象,因为以下虚拟函数在Base中是纯的:virtual void Base::bar您检查了构建的完整输出了吗?你能把编译器的冗长程度调大些吗?提高警告级别?使用不同的编译器作为交叉引用?我刚刚尝试了GNU99,它是相同的错误消息。。。哦,好吧。。。是的,我认为它可能是聪明的,至少给出一个警告,该类没有完全实现。。。没有任何警告。
public:
RenderingEngine1();
void Initialize(int width, int height);
void Render() const;
void UpdateAnimation(float timeStep);
void onRotate(DeviceOrientation newOrientation);
private:
GLuint m_framebuffer;
GLuint m_renderbuffer;
};
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;