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

问题描述 投票:0回答:1

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

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

Table.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++ namespaces extern linkage lnk2001
1个回答
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) — 非易失性 const 限定类型的非内联变量 既没有明确声明为 extern 也没有事先声明为 有外部链接;或

© www.soinside.com 2019 - 2024. All rights reserved.