我試圖通過它的基類來訪問派生類的數據成員,並且遇到了一些麻煩。C++中的多態性故障
下面是代碼:
for (auto actor : drawables) {
if (actor.isDrawable()) {
std::vector<glm::vec3> verts = actor.getVerticies();
for (glm::vec3 v : verts) {
// do stuff
}
}
}
但是當我嘗試運行此,它說,綠黨的大小爲0的時候,我知道我已經加入VEC 3的載體中。
我有一個名爲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()
{
}
有沒有什麼方法可以通過基礎類訪問verts矢量在我的廁所P +
你可以發佈'Cube :: addVert'和'Cube :: getVertices'的實現嗎? –
在這裏發佈_formatted_代碼時請不要使用tab('\ t'')字符!使用體面的IDE或某些文本編輯器將標籤字符重新格式化爲4(或更少)空格,然後將其插入標記形式。我編輯了你的第一部分代碼部分來演示我的意思,請爲其他代碼部分進行說明。 –
是否有代碼實際上將一個vert添加到Actor3D的vert中? –