Явная квалификация в декларации
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 правильно содержит файл заголовка.
Ответы
Ответ 1
Вы не можете объявлять (или определять) объекты, которые принадлежат пространству имен за пределами их пространства имен. Сделайте это:
namespace foo { void bar() {} }
не это:
void foo::bar() {} // not legal
РЕДАКТИРОВАНИЕ Вышеупомянутое неверно, вы можете определить объект за пределами его пространства имен, если его объявление в пространстве имен было замечено. Для этой ошибки должна быть другая причина.
Ответ 2
Я столкнулся с той же проблемой. У меня был источник, скомпилированный с использованием MS Visual Studio, но с помощью g++ в Linux он дал мне:
... error: explicit qualification in declaration of '...
Похоже, эта ошибка возникает, когда реализация уже находится внутри namespace foospace {...}
, и реализация снова возвращает пространство имен int foospace::barfunction(int blah){return 17;}
.
В принципе, если реализация (код в файле .cpp) уже находится внутри namespace foospace {...}
, тогда удалите foospace::
из определения функции.
Ответ 3
Ну, это не ответ на этот конкретный вопрос, но поскольку это первый результат поиска Google при поиске этого сообщения об ошибке, я просто могу сказать, что получил это сообщение об ошибке, когда я дважды объявил пространство имен (когда не нужно) - вот так
error: явная квалификация в объявлении...
namespace foo {
// REMOVE THIS "foo::" from here
void foo::myFunction(int x) {
// ...
}
}
Ошибка начинающего. Проверьте пространства имен.