Yanıtlar:
Bunun nedeni, aşağıdaki koda sahip olmanızdır:
class JSONDeserializer
{
Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString);
};
Bu geçerli C ++ değil, ancak Visual Studio bunu kabul ediyor gibi görünüyor. Standart uyumlu bir derleyici ile derleyebilmek için aşağıdaki koda değiştirmelisiniz (gcc bu noktada standartla daha uyumludur).
class JSONDeserializer
{
Value ParseValue(TDR type, const json_string& valueString);
};
Hata JSONDeserializer::ParseValue
, nitelikli bir ad (ad alanı niteliğine sahip bir ad) olmasından ve böyle bir adın bir sınıfta yöntem adı olarak yasaklanmasından kaynaklanır.
Bu, bir sınıfın bir sınıf işlevi ile gereksiz yere bahsedildiği anlamına gelir. Kaldırmayı deneJSONDeserializer::
Bu satırı sınıf bildiriminin içine mi koyuyorsunuz ? Bu durumda JSONDeserializer::
.
Okunabilirlik / sürdürülebilirlik için değerli bir not:
JSONDeserializer::
Niteleyiciyi uygulama dosyanızdaki (* .cpp) tanımla tutabilirsiniz .
Sınıf içi beyanınız (başkalarının da belirttiği gibi) niteleyiciye sahip olmadığı sürece, g ++ / gcc iyi çalışacaktır.
Örneğin:
MyFile.h dosyasında:
class JSONDeserializer
{
Value ParseValue(TDR type, const json_string& valueString);
};
Ve myFile.cpp'de:
Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString)
{
do_something(type, valueString);
}
MyFile.cpp birçok sınıftan yöntemler uyguladığında, sadece tanıma bakarak kimin kime ait olduğunu bilmeye yardımcı olur.
JSONDeserializer::
cpp dosyası için (veya genel olarak tanım) gereklidir. Aksi takdirde, tanımlanmamış bir referans alırsınız. coliru.stacked-crooked.com/a/8f8a0cd3f9db6c94 coliru.stacked-crooked.com/a/6cd1efe94c09d521