C ++中额外的限定错误

我有一个成员函数,定义如下:

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

当我编译源代码时,我得到:

错误:额外资格'JSONDeserializer ::'在成员'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::

值得注意的是可读性/可维护性:

您可以将JSONDeserializer:: qualifier与定义保存在您的实现文件(* .cpp)中。

只要你的类声明(正如其他人所提到的)没有限定符,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实现许多类的方法时,只要查看定义就知道谁属于谁。