C++ 为什么这会给我一个无效的基类错误?

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

我有两个类叫做Renderable和Triangle。后者应该是从前者衍生出来的。我计划将一个数组及其长度传递给三角形构造函数,而三角形构造函数又将把它传递给Renderable类中的构造函数,该类将处理相应的参数。以下是头文件:

可渲染的

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] ;