之前我错误输入了错误消息。它现在已修复。
我目前收到以下编译器错误消息
error: no match for 'operator<<' in 'std::cout << Collection::operator[](int)(j)'
编译器抱怨的代码是
cout << testingSet[j];
其中testingSet
是Collection
类型的对象,其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];
}
答案 0 :(得分:6)
可能您的运营商应声明为:
ostream& operator<<(ostream &strm, const Example &ex)
注意const-reference to Example。
Visual Studio有一个扩展名,允许绑定对非const r值的引用。我猜你的operator[]
会返回一个r值。
无论如何,operator<<
应为const
,因为不应该修改书面对象。