【问题标题】:What does the "explicit qualification in declaration" error message mean?“声明中的明确限定”错误消息是什么意思?
【发布时间】:2012-01-17 17:02:31
【问题描述】:
battleutils.cpp:1037: error: explicit qualification in declaration of '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 文件正确包含头文件。

【问题讨论】:

  • 投票关闭为“不包含 MCVE”,发布的代码没有任何问题
  • 出现这种情况的一种可能方式是如果您忘记了},或者没有意识到您在cpp 文件中已经有namespace battleutils。例如,namespace N { int f(); int N::f() {} } 给出了相同的错误。在这种情况下,最佳答案的建议修复 namespace N { int f(); namespace N { int f() {} } } 将隐藏错误消息,但实际上定义了不同的函数 N::N::f。我个人更喜欢在我自己的代码中使用显式限定,以便在参数不匹配时生成错误消息(而不是重载或隐藏预期的函数)。

标签: c++ compiler-errors g++


【解决方案1】:

tl;dr:从函数名之前删除命名空间。

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

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

当实现已经在namespace foospace {...} 中并且实现再次提供命名空间int foospace::barfunction(int blah){return 17;} 时,似乎会发生此错误。

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

【讨论】:

    【解决方案2】:

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

    错误:声明中的明确限定 ...

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

    它要么丢失,要么多次声明,要么命名空间错误。 来自其他使用命名空间系统略有不同的编程语言,我明白为什么很容易混淆,因为 C++ 的类需要像这样定义类名myClass::myMemberFunction(...)

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-20
        • 1970-01-01
        • 2022-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多