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

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

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

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

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

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

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

 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 является квалифицированным именем (имя с квалификацией пространства имен), и такое имя запрещено как имя метода в classе.

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

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

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

Вы можете сохранить JSONDeserializer:: qualifier с определением в вашем файле реализации (* .cpp).

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

  • Почему вектор :: ссылка не возвращает ссылку на bool?
  • Возвращать определенный тип внутри Haskell
  • Рекомендуемые опции предупреждения gcc для C
  • Ошибка в classе Swift: свойство не инициализировано при вызове super.init
  • Анонимный метод в вызове Invoke
  • cc1plus: ошибка: непризнанная опция командной строки «-std = c ++ 11» с g ++
  • Ошибка компиляции кода слишком велика в Java
  • Почему этот общий код компилируется в java 8?
  • Определение манифеста размещенной сборки не соответствует ссылке на сборку
  • Что означает ошибка компиляции «Не могу найти символ»?
  • Ошибка: выполнение выполнено для задачи ': app: transformClassesWithJarMergingForDebug'
  • Давайте будем гением компьютера.