【发布时间】:2014-04-24 18:37:18
【问题描述】:
我正在尝试通过其基类访问派生类的数据成员,但遇到了一些麻烦。
代码如下:
for (auto actor : drawables) {
if (actor.isDrawable()) {
std::vector<glm::vec3> verts = actor.getVerticies();
for (glm::vec3 v : verts) {
// do stuff
}
}
}
但是当我尝试运行它时,它说当我知道我已将 vec3 添加到向量中时,verts 的大小为 0。
我有一个名为 Actor3D 的基类,它具有以下属性:
class Actor3D
{
private:
static int actorCount;
protected:
int id;
bool _isDrawable;
glm::vec3 position;
glm::vec3 rotation;
std::vector<glm::vec3> verts;
//std::vector<glm::vec3> color;
std::vector<glm::vec3> normals;
virtual void addVert(float x, float y, float z);
public:
virtual std::vector<glm::vec3> getVerticies() const { return verts; }
...
}
然后我有一个具有以下定义的派生类:
#include "engine\Actor3D.h"
class Cube : public Actor3D
{
public:
Cube();
~Cube();
};
在cpp文件中:
Cube::Cube()
{
_isDrawable = true;
position.x = 5;
position.y = 5;
position.z = 7;
addVert(-1.0, 0.0, -1.0);
addVert(-1.0, 0.0, 1.0);
addVert(1.0, 0.0, 1.0);
addVert(1.0, 0.0, -1.0);
}
Cube::~Cube()
{
}
有什么方法可以通过我的 for 循环中的基类访问顶点向量吗?
【问题讨论】:
-
你能发布
Cube::addVert和Cube::getVertices的实现吗? -
在此处发布格式化代码时请不要使用制表符(
'\t')!使用一个像样的 IDE 或一些文本编辑器将制表符重新格式化为 4 个(或更少)空格,然后再将其插入标记表单中。我已经编辑了您的第一个代码部分以说明我的意思,请为其他代码部分执行此操作。 -
是否有代码实际上在 Actor3D 的顶点中添加了顶点?
标签: c++ inheritance polymorphism virtual function-calls