【问题标题】:Why is this giving me the invalid base class error?为什么这给了我无效的基类错误?
【发布时间】: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


【解决方案1】:
const float* data[0] ;

此数组成员声明格式不正确。数组变量的大小不能为0。

否则示例格式正确(假设函数在某个翻译单元中定义)。

对于此类问题还有更有效的解决方案吗?

解决方法是不要声明大小为 0 的数组变量。

【讨论】:

    【解决方案2】:

    所以这里的问题是我想要的代码设计是不可取的,我应该使用 std::vector 或创建具有固定数组长度的 Renderable 类的另一个子类型,然后从它扩展。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      • 2011-09-07
      • 1970-01-01
      • 2022-08-12
      • 2020-09-15
      相关资源
      最近更新 更多