在命名空间内定义外部变量LNK2001错误

Extern variable define inside namespace LNK2001 Error

提问人:JAM1693 提问时间:3/4/2023 最后编辑:Drew DormannJAM1693 更新时间:3/4/2023 访问量:112

问:

我在 C++ Visual Studio 中遇到了这些外部定义的变量的问题。

我有大型数据表,这些表被编译成代码,而不是读取。它们是.cpp文件,定义如下:

表.cpp

namespace EX{
const int Var_Length=31;
const double Var[31]={31 Doubles};
}

在我的同一个解决方案中,我有另一个class.h和class.cpp,我试图在外部声明这些变量。

类.h

namespace EX{
class MyClass{};
extern const int Var_Length;
extern const double Var[];
}

我已经阅读了一堆帖子,但没有太大帮助。一些人认为它们可能需要是一个全局变量。就 C++ 语法而言,我仍然是一个新手,但我还没有看到任何涵盖命名空间外部变量的内容。

C++ 命名空间 extern linkage lnk2001

评论


答:

2赞 Vlad from Moscow 3/4/2023 #1

常量变量具有内部联系。也就是说,它们不能在声明它们的编译单元之外引用。

你应该写

namespace EX{
    extern const int Var_Length=31;
    extern const double Var[31]={31 Doubles};
}

来自 C++ 17 标准(6.5 程序和链接)

3 具有命名空间范围 (6.3.6) 的名称具有内部链接,如果它是 的名称

(3.2) — 非易失性常量限定类型的非内联变量 既没有明确声明为 extern,也没有事先声明为 有外部联系;或

评论

1赞 Captain Giraffe 3/4/2023
这些年来,这种语言结构没有太大变化,所以我们不提 extern 上的规范问答就错了。stackoverflow.com/questions/1433204/......
0赞 JAM1693 3/4/2023
非常感谢您的解释。我怀疑它与const类型有关,但我没有看到这样的例子。这行得通。踢我自己没有弄清楚这一点!