我有一个成员函数,定义如下:
Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString);
当我编译源代码时,我得到:
这是什么?如何删除此错误?错误:成员'ParseValue'上的额外资格'JSONDeserializer ::'
答案 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();
};