C++ 为什么这会给我一个无效的基类错误?
我有两个类叫做Renderable和Triangle。后者应该是从前者衍生出来的。我计划将一个数组及其长度传递给三角形构造函数,而三角形构造函数又将把它传递给Renderable类中的构造函数,该类将处理相应的参数。以下是头文件: 可渲染的C++ 为什么这会给我一个无效的基类错误?,c++,arrays,inheritance,C++,Arrays,Inheritance,我有两个类叫做Renderable和Triangle。后者应该是从前者衍生出来的。我计划将一个数组及其长度传递给三角形构造函数,而三角形构造函数又将把它传递给Renderable类中的构造函数,该类将处理相应的参数。以下是头文件: 可渲染的 class Renderable { protected: const int dataLength = 0; const float* data[0] ; public: Renderable(); Renderable(i
class Renderable {
protected:
const int dataLength = 0;
const float* data[0] ;
public:
Renderable();
Renderable(int dataLength, float* data[]);
virtual void render() const =0 ;
};
三角形
#pragma once
#include <glad/glad.h>
#include "Renderable.h"
class Triangle : public Renderable {
public:
void render() const;
};
#pragma一次
#包括
#包括“Renderable.h”
类三角形:公共可渲染{
公众:
void render()常量;
};
所以问题是错误检查给了我无效的基类。我做了一些研究,发现数组在没有指定大小的情况下不能成为实例变量,但这对我来说仍然很困惑。有人能告诉我这件事吗
还有没有更有效的方法来解决这样的问题
谢谢大家!
此数组成员声明的格式不正确。数组变量的大小不能为0
否则,示例是格式良好的(假设函数是在某个翻译单元中定义的)
还有没有更有效的方法来解决这样的问题
解决方案是不声明大小为0的数组变量。因此,这里的问题是我想要的代码设计是不可取的,我应该使用std::vector
,或者使用固定数组长度创建Renderable
类的另一个子类型,然后从中进行扩展。这样做的目的是什么数据
?为什么它是一个大小为0的数组?@cigien这是针对OpenGl的,我将一个浮点数组传递到gl状态机,以便它为我呈现内容。您在这里创建了一个大小为0的浮点数组*
。要获得浮点数组,请使用float*数据代码>我不知道OpenGi,但是在C++中,你不能有一个大小为0的数组。您可能只需要一个浮点数组,如float*数据代码>否,它不符合当前编写的要求。将浮点数组的大小指定为零将无助于实现“不同实现的不同长度”。如果您需要在编译时知道它,您可以考虑使<代码>可渲染的< /C>没有浮点数组,然后在模板中派生一个模板子集,该子类指定“代码>数据长度”。然后,对于具有固定已知数组的任何子类继承它。类似地,您可以为层次结构的另一个分支创建子类Renderable
,该分支提供可变大小的数组(可以使用std::vector
实现)。
const float* data[0] ;