运算符中的模板参数推导/替换失败<<()

时间:2015-05-02 06:15:44

标签: g++ operator-overloading

我正在尝试编译的类得到以下编译器错误几乎与另一个编译好的类相同。

这是编译器错误: spell.cpp:在函数'std :: ostream& muddify :: character :: operator<<(std :: ostream&,const muddify :: character :: spell&)': spell.cpp:11:9:错误:不匹配'operator<<'(操作数类型是'std :: ostream {aka std :: basic_ostream}'和'const id_t {aka const unsigned int}')      out<

这对我来说很奇怪,因为id_t只是unsigned int的typedef,而且我还有其他运算符重载,它们使用几乎相同的语法编译。我正在使用c ++ 11标准在fedora 21上的g ++版本4.9.2下编译此代码。

以下是我的功能:

std::ostream& muddify::character::operator<<(std::ostream & out,
                                         const muddify::character::spell& s)
{
    out <<s.id << "," << s.name << "," << s.desc
        << attribute_strings[unsigned(s.attribute)];
    return out;
}

我正在尝试使用完全限定的命名空间来改进项目管理,因此我怀疑这将成为问题的一部分。

如果您需要进一步的代码或解释,我很乐意提供。

由于 保罗

1 个答案:

答案 0 :(得分:0)

您提到的命名空间实验听起来像问题。

错误消息是抱怨'muddify'命名空间中缺少运算符,而不是'std'。换句话说,您需要定义该运算符(或以某种方式将其指向名称空间std中的运算符)。