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实现许多类的方法时,只要查看定义就知道谁属于谁。