C ++中的额外限定错误

时间:2011-04-12 22:28:08

标签: c++ g++ compiler-errors

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

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

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

  

错误:成员'ParseValue'上的额外资格'JSONDeserializer ::'

这是什么?如何删除此错误?

5 个答案:

答案 0 :(得分:181)

这是因为您有以下代码:

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是限定名称(具有命名空间限定名称)的事实,并且禁止将此类名称作为类中的方法名称。

答案 1 :(得分:17)

这意味着使用类函数冗余地提到了一个类。尝试删除JSONDeserializer::

答案 2 :(得分:13)

您是否将此行置于类声明中?在这种情况下,您应该删除JSONDeserializer::

答案 3 :(得分:5)

有关可读性/可维护性的值得注意的事项:

您可以将JSONDeserializer::限定符与实现文件(* .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实现来自许多类的方法时,仅通过查看定义就可以知道谁属于谁。

答案 4 :(得分:0)

当我的头文件缺少右括号时,我看到了此错误。

导致此错误:

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

修复此错误:

// Obj.h
class Obj {
public:
    Obj();
};
相关问题