Answers:
这是因为您具有以下代码:
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::
您是否将此行放在类声明中?在这种情况下,您应该删除JSONDeserializer::
。
可读性/可维护性的重要说明:
您可以将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实现许多类中的方法时,仅通过查看定义,有助于了解谁属于谁。
JSONDeserializer::
需要cpp文件(或一般定义)。否则,您将获得未定义的引用。coliru.stacked-crooked.com/a/8f8a0cd3f9db6c94 coliru.stacked-crooked.com/a/6cd1efe94c09d521