muaddib1971
muaddib1971

Reputation: 11

template argument deduction/substitution failure in operator<<()

I am getting the following compiler error with a class I am trying to compile with is almost identical to another class that compiles fine.

Here is the compiler error: spell.cpp: In function ‘std::ostream& muddify::character::operator<<(std::ostream&, const muddify::character::spell&)’: spell.cpp:11:9: error: no match for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream}’ and ‘const id_t {aka const unsigned int}’) out <

This seems strange to me as id_t is just a typedef of unsigned int and also I have other operator overloads that are compiling fine with pretty much the same syntax. I am compiling this code under g++ version 4.9.2 on fedora 21 using the c++11 standard.

Below is my function:

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

I am experimenting with this project with using fully qualified namespaces for improved project management so I suspect that would be part of the issue.

If you need further code or explanations I am happy to provide that.

Thanks Paul

Upvotes: 0

Views: 56

Answers (1)

Barry Gackle
Barry Gackle

Reputation: 839

The namespace experiments you mentioned sound like the issue.

The error message is complaining of a missing operator in the 'muddify' namespace, not 'std'. In other words, you need to define that operator (or somehow point it at the one in namespace std).

Upvotes: 0

Related Questions