我有一个名为Obje的超类
#ifndef OBJE_H
#define OBJE_H
#include <QString>
class Obje
{
public:
Obje();
QString name="";
int id;
int itemid=0;
void setItemid(int i);
virtual void update(){};
};
#endif // OBJE_H
我得到了一个名为Npc
的子类#ifndef NPC_H
#define NPC_H
#include "obje.h"
#include "QString"
#include "QPixmap"
class Npc : public Obje
{
public:
Npc(QString dir="left");
QString direction="left";
QPixmap* spriteSheet = nullptr;
QPixmap face;
QPixmap sprites[3];
void update(int nid);
QPixmap* getCurrentSprite();
int currentFrame;
QString frameDirection;
};
#endif // NPC_H
我还有一个类来管理listWidgets
class ListUpdate
{
public:
ListUpdate();
static void update(QListWidget *q, vector<Obje>& i);
private:
static struct item{
QString id;
QString name;
QPixmap px;
};
static QListWidgetItem* newItem(ListUpdate::item &i, int c);
};
#endif // LISTUPDATE_H
当我尝试传递名为&#34; npcs&#34;的对象时这是类型向量&#34; Npc&#34;到ListUpdate :: update,它给出了这个错误 传递矢量:
ListUpdate::update(ui->listWidget,npcs);
错误:
C:\Qt Projects\RpgEditor\npcscreen.cpp:64: error: C2665: 'ListUpdate::update': none of the 3 overloads could convert all the argument types
注意:我还有另外两个重载函数,我没有在这里写它们以防止不必要的混淆(这就是为什么它说,&#34;没有3个重载&#34;)< / p>
为什么它不接受我的子类?
答案 0 :(得分:0)
base 类和派生的类之间的关系不会扩展到容器(少数特殊情况除外)。 std::vector<Npc>
无法转换为std::vector<Obje>
。也许您可以像这样模拟update
方法:
template<class T>
static void update(QListWidget *q, vector<T>& i);
此解决方案适用于与Obje
的预期界面匹配的任何类型的向量,包括但不限于公开派生自Obje
的类型。