【发布时间】:2021-04-27 01:24:04
【问题描述】:
我有两个类,称为 Renderable 和 Triangle。后者应该是从前者派生的。我计划将一个数组及其长度传递给 Triangle 构造函数,然后将其传递给 Renderable 类中的构造函数,该构造函数将处理相应的参数。以下是头文件:
可渲染.h
class Renderable {
protected:
const int dataLength = 0;
const float* data[0] ;
public:
Renderable();
Renderable(int dataLength, float* data[]);
virtual void render() const =0 ;
};
三角形.h
#pragma once
#include <glad/glad.h>
#include "Renderable.h"
class Triangle : public Renderable {
public:
void render() const;
};
所以问题是错误检查给了我invalid base class。我做了一些研究,发现数组在没有指定大小的情况下不能成为实例变量,但这对我来说仍然很困惑。有人可以请教我吗?
对于此类问题还有更有效的解决方案吗?
谢谢!
【问题讨论】:
-
data的目的是什么?为什么它是一个大小为 0 的数组? -
-
您在这里创建了一个大小为 0 的
float*数组。为了有一个浮点数组,请使用float* data; -
我对 OpenGI 一无所知,但在 C++ 中,你不能有一个大小为 0 的数组。你可能只想要一个浮点数组,比如
float *data; -
不,这不是目前所写的。将浮点数组大小指定为零将无助于您实现“不同实现的不同长度”。如果您需要在编译时知道它,您可以考虑让
Renderable没有浮点数组,然后派生一个模板化的子类,在模板中指定dataLength。然后从具有固定已知数组的任何子类继承。类似地,您可以将Renderable子类化为提供可变大小数组的层次结构的替代分支(可以使用std::vector实现)。
标签: c++ arrays inheritance