явная квалификация в декларации - PullRequest
22 голосов
/ 11 декабря 2011

battleutils.cpp: 1037: ошибка: явная квалификация в объявлении 'int32 battleutils :: AbilityBenediction (CBattleEntity *, CBattleEntity *)'

Что именно означает эта ошибка?

Первая строка здесь - 1037 (в battleutils.cpp):

int32 battleutils::AbilityBenediction(CBattleEntity* PCaster, CBattleEntity* PTarget)
{
      ....
      return blah;
}

В заголовочном файле:

namespace battleutils
{

это так:

    int32   AbilityBenediction(CBattleEntity* PCaster, CBattleEntity* PTarget);

Файл .cpp правильно включает заголовочный файл.

Ответы [ 3 ]

19 голосов
/ 11 июня 2015

Я столкнулся с той же проблемой.У меня был какой-то источник, скомпилированный с использованием MS Visual Studio, но с использованием g ++ в Linux он дал мне:

... error: explicit qualification in declaration of '...

Похоже, что эта ошибка возникает, когда реализация уже находится внутри namespace foospace {...}, и реализация снова дает пространство именint foospace::barfunction(int blah){return 17;}.

Обычно, если реализация (код в вашем файле .cpp) уже находится внутри namespace foospace {...}, тогда удалите foospace:: из определения функции.

7 голосов
/ 07 января 2018

Ну, это не ответ на этот конкретный вопрос, но, поскольку это первый результат поиска в Google при поиске этого сообщения об ошибке, я просто могу сказать, что получил это сообщение об ошибке, когда я дважды объявил пространство имен (когдане требуется) - вот так

ошибка: явное уточнение в объявлении ...

namespace foo {

    // REMOVE THIS "foo::" from here
    void foo::myFunction(int x) {
        // ...
    }

}

Ошибка новичка.Проверьте свои пространства имен.Он либо отсутствует, многократно объявлен, либо неверен в пространстве имен - я бы предположил.

0 голосов
/ 16 июля 2018

Извините, если уже упоминалось выше.Я попал сюда, потому что я перешел с MSVC (Windows) на мою установку Archlinux для эффективного тестирования кросс-компиляции.

Итак, будьте внимательны, MSVC (Visual Studio) будет разрешать использование дополнительных квалификаций пространства имен - по крайней мере, с ключом / W1 (предупреждения уровня 1), таким образом игнорируя дополнительную квалификацию (явное пространство имен внутри себя).Обратите внимание, что либо в gcc;лязг;msvc, эта ошибка не происходит с членами класса и параметрами функций, и это то, что смущает меня из-за того, что ошибка дополнительной квалификации применяется только к функциям "unit / file" ...

...