Распечатать вектор объектов класса - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть три класса, базовый класс: устройство и два производных класса: смартфон и планшет.

Печать - это виртуальная функция, которая переопределена в производных классах.Я хотел бы создать вектор устройств 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 голосов
/ 02 декабря 2018

Вы используете указатель, поэтому вам нужно использовать семантику указателя:

devices[i]->print();

Оператор -> для std::unique_ptr возвращает объект, которым он управляет (т.е. экземпляр Device), и вы можете вызывать методы

Оператор . пытается вызвать метод для std::unique_ptr объекта, и этот класс не имеет метода с именем print.

Также обратите внимание, что объявление вашегометод делает невозможным использование вместе с std::cout.Чтобы это работало, ваша функция должна быть изменена на перегрузку operator << ( см. Ссылку для получения дополнительной информации )

0 голосов
/ 02 декабря 2018

Вам необходимо вызвать функцию print для каждого элемента в векторе устройств, а не для самого вектора.

devices[i].print()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...