ошибка дополнительной квалификации в C ++ - PullRequest
100 голосов
/ 13 апреля 2011

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

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

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

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

Что это?Как мне убрать эту ошибку?

Ответы [ 4 ]

182 голосов
/ 13 апреля 2011

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

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

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

17 голосов
/ 13 апреля 2011

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

13 голосов
/ 13 апреля 2011

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

5 голосов
/ 24 апреля 2015

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

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

...