#include <iostream>
#include <vector>
class UserData
{
std::string status = "Active";
public:
std::string first_name;
std::string last_name;
std::string get_status() //no colon
{
return status;
}
};
int main()
{
UserData user1;
user1.first_name = "LaLaLa";
user1.last_name = "GGGG";
UserData user2;
user2.first_name = "HaHaHa";
user2.last_name = "DDDDD";
std::vector<UserData> uservec;
uservec.push_back(UserData());
for (auto& i : uservec) { std::cout << i << "\t"; };
}
編譯器一直告訴我沒有運算子 "<<" 匹配這些運算元在行: for (auto& i : uservec) { std::cout << i << "\t"; };。如果我創建一個函式并做一個for回圈就可以了,但是我不知道為什么我不能for (auto& i : uservec)用來讀取范圍uservec?任何人都可以告訴我為什么嗎?提前致謝!
uj5u.com熱心網友回復:
編譯器已經告訴您缺少什么。您的課程沒有 << 運算子。
所以,請添加它,所有問題都解決了。
例子:
#include <iostream>
#include <vector>
class UserData
{
std::string status = "Active";
public:
std::string first_name;
std::string last_name;
std::string get_status() //no colon
{
return status;
}
friend std::ostream& operator << (std::ostream& os, const UserData& ud) {
return os << ud.first_name << ' ' << ud.last_name;
}
};
int main()
{
UserData user1;
user1.first_name = "LaLaLa";
user1.last_name = "GGGG";
UserData user2;
user2.first_name = "HaHaHa";
user2.last_name = "DDDDD";
std::vector<UserData> uservec;
uservec.push_back(user1);
uservec.push_back(user2);
for (auto& i : uservec) { std::cout << i << '\n'; };
}
在 for 回圈auto& i中將回傳對向量中 UserData 元素的參考。意味著,在第一個回圈中運行“i”將是“user1”,在下一個回圈中運行“i”將是“user2”。
在輸出部分,您將首先擁有:
std::cout << user1 << '\n';進而std::cout << user2 << '\n';
此時<<將呼叫 UserData的運算子,因為您告訴編譯器這樣做。
因此,您將運算子<<用于輸出流std::ostream(在本例中為std::cout)和 UserData 型別的“user1”。然后編譯器知道它需要呼叫這個多載的運算子。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/352909.html
