声明中的明确资格

时间:2011-12-11 03:49:04

标签: c++ g++

  

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 个答案:

答案 0 :(得分:18)

我遇到了同样的问题。我有一些使用MS Visual Studio编译的源代码,但在Linux中使用g ++它给了我:

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

当实现已经在namespace foospace {...}内并且实现再次为命名空间int foospace::barfunction(int blah){return 17;}时,会出现此错误。

基本上,如果实现(你.cpp文件中的代码)已经在namespace foospace {...}内,那么从函数定义中删除foospace::

答案 1 :(得分:6)

嗯,这不是这个特定问题的答案,但是因为这是搜索此错误消息时Google搜索的第一个结果,我可能会告诉我在声明两次命名空间时收到此错误消息(当不需要) - 像这样

  

错误:宣布......的明确资格。

namespace foo {

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

}

初学者的错误。检查您的命名空间。它要么丢失,要么多次声明或错误的命名空间 - 我会假设。

答案 2 :(得分:0)

很抱歉,如果上面已经提到过。 我之所以来到这里是因为我已经从MSVC(Windows)切换到我的Archlinux安装,以便有效地测试交叉编译。

因此,请“意识到”使用命名空间额外限定条件的MSVC(Visual Studio)是允许的-至少使用/ W1开关(级别1警告),因此忽略了额外限定条件(其内部的显式命名空间)。注意,在gcc中;铛; msvc,该错误不会发生在类成员和函数参数上,这就是令我困惑的仅适用于“单元/文件”函数的额外限定错误的原因...