编译器错误消息与cout

时间:2011-10-03 09:11:37

标签: c++ compilation compiler-errors stdio

之前我错误输入了错误消息。它现在已修复。

我目前收到以下编译器错误消息

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];
}

1 个答案:

答案 0 :(得分:6)

可能您的运营商应声明为:

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

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

无论如何,operator<<应为const,因为不应该修改书面对象。