C + + 中的额外限定错误

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

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

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

Error: 在成员‘ ParseValue’上的额外限定‘ JSONDeferializer: :’

这是什么? 我如何删除这个错误?

209106 次浏览

这意味着一个类被一个类函数冗余地提到了

你把这一行 在里面作为类声明了吗? 在这种情况下,你应该删除 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是一个限定名(一个带有名称空间限定的名称) ,这样的名称在类中作为方法名是被禁止的。

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

您可以在实现文件(* . 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 实现来自许多类的方法时,仅通过查看定义就可以帮助了解谁属于谁。

当我的头文件缺少结束括号时,我看到了这个错误。

导致这个错误:

// Obj.h
class Obj {
public:
Obj();

修正这个错误:

// Obj.h
class Obj {
public:
Obj();
};