我有一个成员函数,定义如下:
Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString);
当我编译源代码时,出现以下错误:
error: extra qualification 'JSONDeserializer::' on member 'ParseValue'
这是什么意思?我该如何消除这个错误?
我有一个成员函数,定义如下:
Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString);
当我编译源代码时,出现以下错误:
error: extra qualification 'JSONDeserializer::' on member 'ParseValue'
这是什么意思?我该如何消除这个错误?
这是因为你有以下代码:
class JSONDeserializer
{
Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString);
};
这不是有效的C++代码,但Visual Studio似乎可以接受它。您需要将其更改为以下代码,以便能够使用符合标准的编译器进行编译(在这一点上,gcc更符合标准)。
class JSONDeserializer
{
Value ParseValue(TDR type, const json_string& valueString);
};
错误是由于JSONDeserializer::ParseValue
是一个限定名称(具有命名空间限定符的名称),而这样的名称在类中作为方法名称是被禁止的。
这表示一个类被在类函数中多余地提及了。尝试移除JSONDeserializer::
。
你是将这行代码放在类声明内吗?如果是的话,你应该移除JSONDeserializer::
。
关于可读性/易维护性的值得注意的一点:
您可以在实现文件(*.cpp)中与定义一起使用JSONDeserializer ::
限定符。
只要您的类内声明(如其他人所述)没有该限定符,g++/gcc就会很友好地运行。
例如:
在myFile.h中:
class JSONDeserializer
{
Value ParseValue(TDR type, const json_string& valueString);
};
在myFile.cpp文件中:
Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString)
{
do_something(type, valueString);
}
当 myFile.cpp 实现了许多类的方法时,通过查看定义来知道谁属于谁会很有帮助。
JSONDeserializer ::
。否则,您将得到未定义的引用。 https://coliru.stacked-crooked.com/a/8f8a0cd3f9db6c94 https://coliru.stacked-crooked.com/a/6cd1efe94c09d521 - Zoe stands with Ukraine当我的头文件缺少闭合括号时,我看到了这个错误。
导致此错误的原因是:
// Obj.h
class Obj {
public:
Obj();
修复此错误:
// Obj.h
class Obj {
public:
Obj();
};