C++中的额外限定错误

pro*_*eek 108 c++ compiler-errors g++

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

Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString);
Run Code Online (Sandbox Code Playgroud)

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

错误:成员'ParseValue'上的额外限定'JSONDeserializer ::'

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

Syl*_*sne 197

这是因为您有以下代码:

class JSONDeserializer
{
    Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString);
};
Run Code Online (Sandbox Code Playgroud)

这不是有效的C++,但Visual Studio似乎接受它.您需要将其更改为以下代码才能使用标准兼容编译器进行编译(gcc在此方面更符合标准).

class JSONDeserializer
{
    Value ParseValue(TDR type, const json_string& valueString);
};
Run Code Online (Sandbox Code Playgroud)

该错误来自于JSONDeserializer::ParseValue一个限定名称(具有名称空间限定名称)的事实,并且这样的名称被禁止作为类中的方法名称.

  • 有什么办法让 Visual Studio 对此发出警告吗? (3认同)
  • @altumano:是这件事https://github.com/VioletGiraffe/cppcheck-vs-addin?如果是这样,请你报告错误 - 该项目非常活跃,并且很有可能将其修复. (3认同)

joe*_*ish 18

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


Boa*_*niv 13

你是否把这一行放在了类声明中?在这种情况下,你应该删除JSONDeserializer::.


bun*_*ive 6

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

您可以JSONDeserializer::在实现文件(*.cpp)中使用定义保留限定符.

只要您的课堂声明(如其他人所述)没有限定符,g ++/gcc就会很好用.

例如:

在myFile.h中:

class JSONDeserializer
{
    Value ParseValue(TDR type, const json_string& valueString);
};
Run Code Online (Sandbox Code Playgroud)

在myFile.cpp中:

Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString)
{
    do_something(type, valueString);
}
Run Code Online (Sandbox Code Playgroud)

当myFile.cpp实现来自许多类的方法时,仅通过查看定义就有助于知道谁属于谁.

  • cpp 文件(或一般定义)的“JSONDeserializer::”是必需的。否则,您会得到未定义的引用。https://coliru.stacked-crooked.com/a/8f8a0cd3f9db6c94 https://coliru.stacked-crooked.com/a/6cd1efe94c09d521 (2认同)
  • 哦,这就是为我做的。我的 .h 文件中有 ClazzName:: 。哎呀。 (2认同)

y.s*_*hyk 5

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

导致这个错误的原因:

// Obj.h
class Obj {
public:
    Obj();
Run Code Online (Sandbox Code Playgroud)

修复此错误:

// Obj.h
class Obj {
public:
    Obj();
};
Run Code Online (Sandbox Code Playgroud)