我对重载<<
运算符有疑问。
我有一个名为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
,因此无法查看重载运算符。愚蠢的错误!
答案 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()
:您可以立即取消引用