friend ostream &operator<<(ostream &out, mapMaker &A) { for(int y = 0; y < A.height; y ++){ for(int x = 0; x < A.width; x ++){ if(x == A.hero.x and y == A.hero.y){ cout << A.hero.mark; } else if(x == A.enemy[0].x and y == A.enemy[0].y){ cout << A.enemy[0].mark; } else if(x == A.enemy[1].x and y == A.enemy[1].y){ cout << A.enemy[1].mark; } else if(x == A.enemy[2].x and y == A.enemy[2].y){ cout << A.enemy[2].mark; } else{ cout << A.at(x,y); } } cout << endl; } return out; }
时间: 2024-02-14 07:27:47 浏览: 115
C语言头文件 OSTREAM.H
根据你提供的代码,你定义了一个重载的输出流操作符`<<`,用于将`mapMaker`对象的内容输出到`ostream`对象中。然而,你在函数体内部使用了`cout`而不是传入的输出流对象`out`。
要解决这个问题,你需要将所有的`cout`替换为`out`,以使用传入的输出流对象进行输出。修改后的代码如下所示:
```cpp
friend ostream& operator<<(ostream& out, mapMaker& A) {
for (int y = 0; y < A.height; y++) {
for (int x = 0; x < A.width; x++) {
if (x == A.hero.x and y == A.hero.y) {
out << A.hero.mark;
} else if (x == A.enemy[0].x and y == A.enemy[0].y) {
out << A.enemy[0].mark;
} else if (x == A.enemy[1].x and y == A.enemy[1].y) {
out << A.enemy[1].mark;
} else if (x == A.enemy[2].x and y == A.enemy[2].y) {
out << A.enemy[2].mark;
} else {
out << A.at(x, y);
}
}
out << endl;
}
return out;
}
```
现在,你可以使用这个重载的操作符来输出`mapMaker`对象的内容到任何一个输出流对象中,例如:
```cpp
mapMaker obj;
// 进行一些操作
cout << obj; // 输出到标准输出流
ofstream file("output.txt");
file << obj; // 输出到文件
```
请记住,为了使上述代码正常工作,你需要包含`<iostream>`或相关的头文件来使用`ostream`和`endl`。
阅读全文