【发布时间】:2017-06-16 19:26:13
【问题描述】:
是否可以为不同类型的对象创建一个队列,但具有相同的接口?
例如,我有一个名为 SensorItem 的接口,以及 4 种 Class,SensorItemA ,传感器项 B, 传感器项C ,传感器项D `
queue <SensorItem> cola;
void encolar(SensorItem* dato)
{
cola.push (*dato);
}
SensorItem* sacar()
{
SensorItem* d=cola.front();
cola.pop();
return d;
}
那是我的班级队列(可乐) 在这里我尝试使用它
void main()
{
Cola c=new Cola();
TemperatureItem t=new TemperatureItem(3.25);
c.encolar(t);
ImuItem i=new ImuItem(3,4,8);
}
我的语法有问题吗?还是无法做到?
【问题讨论】:
-
您应该能够通过创建父类(传感器项)的队列并用该父类的子类填充它来通过多态性(继承)来实现这一点。如果您不熟悉,请在此处阅读多态性:cplusplus.com/doc/tutorial/polymorphism
-
这正是我所做的,但是当我尝试推送项目时出现此错误 Invalid arguments ' Candidates are: void encolar(std::SensorItem *) 这是我的推送:TemperatureItem t=new温度项(3.25); c.encolar(*t); TemperatureItem 继承自 SensorItem :(
-
无关:
main应该返回int,而不是void。如果你从main的末尾不返回任何内容,编译器会为你插入一个return 0。