我有一个绘制函数,它返回向量< >
vector< vector<char> > draw(char penChar, char fillChar) const{
const int breadth = this->height;
const int length = this->width;
vector< vector<char> > temp(breadth, vector<char>(length));
for (int x = 0; x <= height - 1; x++) {
for (int y = 0; y <= width - 1; y++) {
temp[0].push_back(penChar);
}
}
return temp;
}
我重载了运算符&lt;&lt;像这样
friend ostream& operator<<(ostream& os, const vector< vector<char> >& grid) {
for (const vector<char>& vec : grid) {
for (const char& ch : vec) {
os << ch;
}
os << "\n";
}
return os;
}
但是当我运行cout << rect.draw('2', 'w') << endl;
时,我收到以下错误。
entererror: no match for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream<char>}’ and ‘std::vector<std::vector<char> >’)
cout << rect.draw('2', 'w') << endl;
有人能说出为什么编译器找不到这个方法吗? 我还有另一个运营商&lt;
friend ostream& operator<<(ostream& os, const Shape& obj) {
//Some code
return os;
}
但这似乎工作正常。
答案 0 :(得分:2)
你应该简单地将函数lea
放在课堂之外而没有朋友,就像这样:
ostream& operator<<(ostream& os, const vector< vector<char> >& grid)
因为在你定义的函数中没有(在这个例子中)Foo类的变量,所以不能使用ADL(依赖于参数的查找),因此如果你定义了类编译器中的函数,则无法找到它。