gpt4 book ai didi

c++ - 带有 cout 的编译器错误消息

转载 作者:太空宇宙 更新时间:2023-11-04 15:51:26 24 4
gpt4 key购买 nike

我之前打错了错误信息。现在已修复。

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

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

编译器提示的代码是

cout << testingSet[j];

在哪里testingSetCollection 类型的对象有 operator[]重载以返回 Example 类型的对象. Example有一个重载 operator<< 的友元函数用于 ostream 和示例。

注意:这实际上在 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)

注意示例的常量引用。Visual Studio 有一个扩展,允许将引用绑定(bind)到非常量右值。我猜你的 operator[]返回一个右值。

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

关于c++ - 带有 cout 的编译器错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7633044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com