我有三个类,一个基类:Device,两个派生类:SmartPhone和Tablet。
Print是在派生类中重新定义的虚函数。 我想创建一个设备的STL向量(包括智能手机和平板电脑的实例),然后打印该向量中对象的名称。
vector<unique_ptr<Device>> devices(3);
devices[0].reset(new SmartPhone(128, 8));
// memory size, screen size
for (int i = 0; i < 3; i++)
{
devices[i].print();
}
我的矢量打印实现出现错误:
类“ std :: unique_ptr>”没有成员“ print”
如何调用矢量中每个对象的打印功能?
设备基类:
virtual void print(); {}
智能手机派生类:
void print();
-
void SmartPhone::print()
{
printName();
cout << "Memory: " << getMemory() << " Screen Size: " << getScreenSize();
}
答案 0 :(得分:3)
您使用了指针,因此需要使用指针语义:
devices[i]->print();
->
的运算符std::unique_ptr
返回它管理的对象(即Device
实例),您可以在其上调用方法。
操作员.
尝试调用std::unique_ptr
对象上的方法,并且此类没有名为print
的任何方法。
还要注意,方法的声明使它无法与std::cout
一起使用。为了使其正常工作,必须将您的函数更改为重载operator <<
(see the reference for more info)
答案 1 :(得分:-1)
您需要在设备向量中的每个元素上调用print
函数,而不是向量本身。
devices[i].print()