【问题标题】:Invalid use of qualified name限定名称的使用无效
【发布时间】:2014-06-02 07:10:00
【问题描述】:

我正在尝试以下方法:

#include <iostream>

namespace A
{
    extern int j;
}

int main()
{
    int A::j=5;
    std::cout << A::j;
}

但我有error: invalid use of qualified-name ‘A::j’。请解释为什么会出现这个错误?

【问题讨论】:

    标签: c++ qualified-name


    【解决方案1】:

    请解释为什么会出现这个错误?

    该语言根本不允许您在函数内定义命名空间范围的变量。定义必须在namespace A:

    namespace A {
        int j = 5;
    }
    

    或在周围的(全局)命名空间中:

    int A::j = 5;
    

    当然,你可以给函数内部的变量赋值:

    int main() {
        A::j = 5;
        // ...
    }
    

    但您还需要在某个地方定义,因为您的程序没有。

    【讨论】:

    • 在哪里可以找到函数体不允许在其中定义命名空间?我在找对应的子句。
    • @St.Antario:C++11 3.3.3/1,“块中声明的名称是该块的本地名称;它具有块范围。”。所以你不能在块内的命名空间范围内重新声明(因此不能定义)某些东西。
    【解决方案2】:
    #include <iostream>
    
    namespace A
    {
        int j;
    }
    
    int main()
    {
        A::j=5;
        std::cout << A::j;
        return 0;
    }
    

    由于您在全局区域中将命名空间 A 中的 j 声明为 extern,因此您还需要对其进行定义。但主要是,您尝试分配给它,链接时也需要符号定义。所以可以去掉namespace A中的extern,赋值时去掉'int'关键字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多