类对象的打印向量

时间:2018-12-02 14:06:49

标签: c++ vector

我有三个类,一个基类: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();
}

2 个答案:

答案 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()