带有cout的编译器错误消息

Compiler error message with cout

本文关键字:错误 消息 编译器 cout 带有      更新时间:2023-10-16

我之前打错了错误信息。

我目前得到以下编译器错误信息

error: no match for 'operator<<' in 'std::cout << Collection::operator[](int)(j)'

编译器抱怨的代码是

cout << testingSet[j];

其中testingSetCollection类型的对象,对operator[]进行重载,返回Example类型的对象。Example有一个友元函数,可以重载ostream和Example的operator<<

注意:这实际上在Visual Studio中编译得很好;但是不能用g++编译。

下面是operator<<的实现:
ostream& operator<<(ostream &strm, Example &ex)
{
     strm << endl << endl;
     strm << "{ ";
     map<string, string>::iterator attrib;
     for(attrib = ex.attributes.begin(); attrib != ex.attributes.end(); ++attrib)
     {
          strm << "(" << attrib->first << " = " << attrib->second << "), ";
     }
     return strm << "} classification = " << (ex.classification ? "true" : "false") << endl;
}

operator[]

Example Collection::operator[](int i)
{
      return examples[i];
}

可能你的操作符应该声明为:

ostream& operator<<(ostream &strm, const Example &ex)

注意对Example的const引用。Visual Studio有一个扩展,它允许将引用绑定到非const r值。我猜你的operator[]返回一个r值。

无论如何,operator<<应该是const,因为它不期望修改写入的对象。