Відповіді:
Це тому, що у вас є такий код:
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