【发布时间】:2019-06-11 15:30:04
【问题描述】:
我被 C++ 中的一些代码困住了。我无法重载<< 运算符来打印我的地图。
我试图重载运算符,但它不起作用。我不能在 C++98 中使用基于范围的 for 循环。
ostream & operator <<(std::ostream &os,
const std::map<int, Person> &m)
{
for (int i = 0; i < 3; i++)
{
os << i << ":";
for (int x = 0; x < 2; i++) os << x << ' ';
os << std::endl;
}
return os;
}
我现在的代码,没有我的重载类:
class Person{
public:
int kontostand;
string email;
int alter;
Person(int kontostand_, string email_, int alter_)
{
kontostand=kontostand_;
email = email_;
alter = alter_;
}
};
int main()
{
map<int, Person> testmap;
Person Kunde(100, "test", 21);
Person Kunde2(200, "test", 22);
Person Kunde3(300, "test", 23);
testmap.insert(pair<int, Person>(1, Kunde));
testmap.insert(pair<int, Person>(2, Kunde2));
testmap.insert(pair<int, Person>(3, Kunde3));
cout << testmap;
return 0;
}
有人知道如何打印我的地图吗?
【问题讨论】:
-
为什么主题与实际问题不同?
-
“但它没有工作”。 如何它不起作用?你得到编译器错误了吗?运行时错误?它没有输出您期望的结果?
-
你能解释一下你对
operato<<的实现吗? -
I can't use range-based for loops in C++98。基于范围的循环仅隐藏了迭代器的使用。您可以创建一个迭代器map<int, Person>::const_iterator it = testMap.begin()并将其与testMap.end()进行比较? -
您的
operator<<()甚至无法访问传递给它的地图。这意味着地图中的任何内容都不会被打印。内部循环也是无限的,因为如果x < 2会继续运行,但不会更改x的值。