Дополнительная ошибка квалификации в С++
У меня есть функция-член, которая определяется следующим образом:
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 реализует методы из многих классов, это помогает узнать, кто принадлежит кому, просто взглянув на определение.