重载<<运营商没有工作

时间:2016-03-15 18:35:39

标签: c++ operator-overloading unique-ptr

我对重载<<运算符有疑问。

我有一个名为House的班级,我在其中定义了以下内容(我没有将其声明为friend,而且它是免费的&#39;功能&#39;因为我不打算访问私人会员):

std::ostream& operator<<(std::ostream& stream, House const& house)
{
    // Append strings to 'stream'
    return stream
}

在另一堂课中,我有这个:

std::vector<std::unique_ptr<House>> houses

现在,我想遍历我的vector并展示房屋,我有2个问题!

我的第一个问题:有没有办法使用foreach循环遍历vector的{​​{1}},因为我似乎无法做到:unique_ptr < / p>

第二个问题:如果我使用普通的for (auto house : houses) { /* Do stuff */ }循环进行迭代,我会这样做:

for

我收到一条错误消息,指出没有运营商&lt;&lt;匹配操作数。你能告诉我我错过了什么吗?

更新

谢谢大家的回答,使用for (int i = 0; i < houses.size(); i++) { cout << *houses[i].get() << endl; } 的迭代帮了很多忙,我的另一个问题的原因是我在我的auto&文件中定义了我的重载运算符。由于我为House.cpp执行了#include,因此无法查看重载运算符。愚蠢的错误!

1 个答案:

答案 0 :(得分:2)

通过unique_ptr

的向量进行迭代
for (auto& phouse : houses) {  // phouse is a referetence to a unique_ptr
     /* Do stuff using    *p  or p->xxx */ 
}

备注:auto&的技巧意味着循环将使用(通过引用)向量中的指针。仅使用auto,编译器会尝试将unique_ptr复制到循环变量中,这对unique_ptr是禁止的。

我无法重现你第二个问题的错误。至少在添加缺失的;之后没有。顺便说一句,您不需要get():您可以立即取消引用

这是online demo