回答:
これは、次のコードがあるためです。
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::
修飾子は、実装ファイル(* .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