我有一个成员函数,定义如下:
Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString);
当我编译源代码时,我得到:
Error: 在成员‘ ParseValue’上的额外限定‘ JSONDeferializer: :’
这是什么? 我如何删除这个错误?
这意味着一个类被一个类函数冗余地提到了
你把这一行 在里面作为类声明了吗? 在这种情况下,你应该删除 JSONDeserializer::。
JSONDeserializer::
这是因为您有以下代码:
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::ParseValue
值得注意的可读性/可维护性:
您可以在实现文件(* . cpp)中保留带有定义的 JSONDeserializer::限定符。
只要你的类 声明(正如其他人所提到的)没有限定符,g + +/gcc 就会很好用。
例如:
在 myFile.h 中:
在 myFile.cpp 中:
Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString) { do_something(type, valueString); }
当 myFile.cpp 实现来自许多类的方法时,仅通过查看定义就可以帮助了解谁属于谁。
当我的头文件缺少结束括号时,我看到了这个错误。
导致这个错误:
// Obj.h class Obj { public: Obj();
修正这个错误:
// Obj.h class Obj { public: Obj(); };