extra qualification error in C++

prosseek picture prosseek · Apr 13, 2011 · Viewed 160.5k times · Source

I have a member function that is defined as follows:

Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString);

When I compile the source, I get:

error: extra qualification 'JSONDeserializer::' on member 'ParseValue'

What is this? How do I remove this error?

Answer

Sylvain Defresne picture Sylvain Defresne · Apr 13, 2011

This is because you have the following code:

class JSONDeserializer
{
    Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString);
};

This is not valid C++ but Visual Studio seems to accept it. You need to change it to the following code to be able to compile it with a standard compliant compiler (gcc is more compliant to the standard on this point).

class JSONDeserializer
{
    Value ParseValue(TDR type, const json_string& valueString);
};

The error come from the fact that JSONDeserializer::ParseValue is a qualified name (a name with a namespace qualification), and such a name is forbidden as a method name in a class.