Сегодня у меня возникла проблема с передачей std :: unique_ptr в функцию/перегруженный оператор. Например:умный указатель в функции
HEADER
class SpaceMarine{
public:
...
friend std::ostream & operator << (std::ostream &exit, const SpaceMarine &SM);
private:
std::string name_;
.... (some other few parameters)
std::unique_ptr<armor> armor_;
И в .cpp я получил:
std::ostream & operator << (std::ostream &exit, const SpaceMarine& SM){
exit << ... << *SM.stats_ << !!!!!! << *SM.weapon_;
return exit;
}
stats_ и weapon_ оба класса, которые являются членами основного класса через указатели. Для всех классов их собственные перегруженные операторы >> и < < работ (то есть - когда я просто пишу:
std::cout << armor1;
or
std::cin >> weaponb;
они работают).
Итак: что мне нужно положить на место !!!!!! , для unique_ptr работать аналогично * SM.stats_? Поэтому он указывает на перегруженный оператор класса брони и использует его в перегруженном операторе основного класса?
EDIT
Для MikeSeymour:
std::ostream & operator << (std::ostream &exit, const Armor& arm){
return exit << "\n" << arm.name_ << " AR: " << arm.toughness_;
}
, но, как я уже писал раньше - перегруженные операторы для классов членов (брони, оружие) работы.
Умный указатель может использоваться так же, как и обычный указатель, так что, например, '* armor_' будет работать одинаково, если это« обычный »указатель или умный указатель. См. [ 'Станд :: unique_ptr :: оператор *'] (http://en.cppreference.com/w/cpp/memory/unique_ptr/operator*). –
Так это 'armor' или' Armor'? У вас есть два разных типа, или это одна ошибка копирования/вставки? Вопрос будет легче ответить, если вы представили полный (но небольшой) пример, чтобы точно показать, что не так, когда вы пытаетесь вывести '* armor_' и полное сообщение об ошибке. –