我正在尝试重载<<某些模板类的运算符
#include <iostream>
#include <iterator>
#include <map>
template <typename T1, typename T2>
class SampleClass {
public:
SampleClass() = default;
void Add(const T1 &key, const T2 &value)
{
database[key] = value;
}
typename std::map<T1, T2>::const_iterator cbegin() const { return database.cbegin(); }
typename std::map<T1, T2>::const_iterator cend() const { return database.cend(); }
private:
std::map<T1, T2> database;
};
template <typename T1, typename T2>
std::ostream &operator << (std::ostream &os, SampleClass<T1, T2> &rhs)
{
for(auto el = rhs.cbegin(); el != rhs.cend(); el++)
os << el->first << " " << el->second << std::endl;
return os;
}
我从g ++获得的错误
error: cannot bind ‘std::basic_ostream<char>’ lvalue to ‘std::basic_ostream<char>&&’
os << el->first << " " << el->second << std::endl;
我还尝试将此运算符声明为内联友元函数,但结果同样也不起作用。谁能向我解释为什么会发生?
更新: 问题是编译器没有告诉我,我用作SampleClass值的cass没有重载&lt;&lt;运营商。我还在寻找SampleClass,而不是检查其他文件。但是多亏了你告诉我,对于内置类型,一切都很好,我意识到需要检查什么。谢谢,抱歉有问题。