extra qualification error in C++
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:
e开发者_开发问答rror: extra qualification 'JSONDeserializer::' on member 'ParseValue'
What is this? How do I remove this error?
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.
This means a class is redundantly mentioned with a class function. Try removing JSONDeserializer::
Are you putting this line inside the class declaration? In that case you should remove the JSONDeserializer::
.
A worthy note for readability/maintainability:
You can keep the JSONDeserializer::
qualifier with the definition in your implementation file (*.cpp).
As long as your in-class declaration (as mentioned by others) does not have the qualifier, g++/gcc will play nice.
For example:
In myFile.h:
class JSONDeserializer
{
Value ParseValue(TDR type, const json_string& valueString);
};
And in myFile.cpp:
Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString)
{
do_something(type, valueString);
}
When myFile.cpp implements methods from many classes, it helps to know who belongs to who, just by looking at the definition.
I saw this error when my header file was missing closing brackets.
Causing this error:
// Obj.h
class Obj {
public:
Obj();
Fixing this error:
// Obj.h
class Obj {
public:
Obj();
};
精彩评论