Дополнительная ошибка квалификации в С++

У меня есть функция-член, которая определяется следующим образом:

Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString);

Когда я скомпилирую источник, я получаю:

ошибка: дополнительная квалификация "JSONDeserializer::" в члене ParseValue

Что это? Как удалить эту ошибку?

Ответ 1

Это потому, что у вас есть следующий код:

class JSONDeserializer
{
    Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString);
};

Это недопустимый С++, но Visual Studio, похоже, его принимает. Вы должны изменить его на следующий код, чтобы иметь возможность компилировать его с помощью стандартного компилятора (gcc более соответствует стандарту в этой точке).

class JSONDeserializer
{
    Value ParseValue(TDR type, const json_string& valueString);
};

Ошибка возникает из-за того, что JSONDeserializer::ParseValue является квалифицированным именем (имя с квалификацией пространства имен), и такое имя запрещено как имя метода в классе.

Ответ 2

Это означает, что класс избыточно упоминается с помощью функции класса. Попробуйте удалить JSONDeserializer::

Ответ 3

Вы помещаете эту строку внутри объявление класса? В этом случае вы должны удалить JSONDeserializer::.

Ответ 4

Достойное примечание для удобства чтения:

Вы можете сохранить квалификатор 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 реализует методы из многих классов, это помогает узнать, кто принадлежит кому, просто взглянув на определение.