提问人:JAM1693 提问时间:3/4/2023 最后编辑:Drew DormannJAM1693 更新时间:3/4/2023 访问量:112
在命名空间内定义外部变量LNK2001错误
Extern variable define inside namespace LNK2001 Error
问:
我在 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++ 语法而言,我仍然是一个新手,但我还没有看到任何涵盖命名空间外部变量的内容。
答:
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类型有关,但我没有看到这样的例子。这行得通。踢我自己没有弄清楚这一点!
评论