error: no match for 'operator<<' (operand types are 'std::basic_ostream<char>' and 'std::vector<Goods>') 153 | file2<<order.GetAmount()<<order.GetShoppingList()<<order.GetTime()<<endl;
时间: 2024-04-12 17:30:29 浏览: 170
这个错误是因为在输出 `order.GetShoppingList()` 时,没有定义如何将 `std::vector<Goods>` 对象输出到 `std::ostream` 流中。你需要为 `Goods` 类型定义一个友元函数或重载运算符 `<<` 来实现输出操作。
例如,你可以在 `Goods` 类中添加如下的友元函数实现:
```cpp
class Goods {
// ...
friend std::ostream& operator<<(std::ostream& os, const Goods& goods) {
os << goods.name << " - $" << goods.price;
return os;
}
};
```
然后在输出语句中使用 `order.GetShoppingList()`:
```cpp
file2 << order.GetAmount();
for (const auto& goods : order.GetShoppingList()) {
file2 << goods;
}
file2 << order.GetTime() << endl;
```
这样就可以正确输出 `std::vector<Goods>` 对象了。
相关问题
error: no match for ‘operator<<’ (operand types are ‘std::basic_ostream<char>’ and ‘__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> > >::value_type {aka std::vector<int>}’)这个报错是什么原因
这个报错是因为在输出流(std::ostream)中使用了没有定义“<<”运算符的类型。根据错误信息,在这里使用了std::vector<int>,它的“<<”运算符可能没有被定义。可能需要添加自定义的运算符重载来支持此类型的输出。
289 6 D:[Error] no match for operator<< (operand types are std::ostream {aka std::basic_ostream<char> } and Matrix<double> )
这个错误提示是因为你想要使用 `operator<<` 将 `Matrix<double>` 类型的对象输出到标准输出流,但是该类型并没有重载该运算符。
你可以自己实现该运算符的重载。以下是一个示例:
```c++
#include <iostream>
#include <vector>
class Matrix {
public:
Matrix(int rows, int cols) : rows_(rows), cols_(cols), data_(rows * cols) {}
double& operator()(int row, int col) {
return data_[row * cols_ + col];
}
double operator()(int row, int col) const {
return data_[row * cols_ + col];
}
int rows() const {
return rows_;
}
int cols() const {
return cols_;
}
private:
int rows_;
int cols_;
std::vector<double> data_;
};
std::ostream& operator<<(std::ostream& os, const Matrix& matrix) {
for (int i = 0; i < matrix.rows(); ++i) {
for (int j = 0; j < matrix.cols(); ++j) {
os << matrix(i, j) << " ";
}
os << std::endl;
}
return os;
}
int main() {
Matrix mat(2, 3);
mat(0, 0) = 1.0;
mat(0, 1) = 2.0;
mat(0, 2) = 3.0;
mat(1, 0) = 4.0;
mat(1, 1) = 5.0;
mat(1, 2) = 6.0;
std::cout << mat << std::endl;
return 0;
}
```
运行结果如下:
```
1 2 3
4 5 6
```
阅读全文