gpt4 book ai didi

c++ - 单独翻译单元中的两个变量违反了一个定义规则?

转载 作者:搜寻专家 更新时间:2023-10-31 00:31:54 24 4
gpt4 key购买 nike

我在两个 .cpp 文件中定义了一个变量 const char * FILENAME = "a/file/name",分别称为 a.cppb。 cpp。 Nothing 直接包含这些文件,它们只分别将 a.hb.h 包含到它们自己中。然后,这两个头文件都包含在 main.cpp

我的问题是出现以下链接器错误:

a.obj:错误 LNK2005:“char const * const FILENAME”(?FILENAME@@3PBDB) 已在 b.obj 中定义

我不经常使用文件范围变量,所以我认为这没问题......我在这里做错了什么?

最佳答案

如果它们代表同一个文件,那么您应该将其中一个声明为 extern 以引用另一个模块中的定义。

File1.cpp

const char * FILENAME = "a/file/name";

File2.cpp

extern const char * FILENAME;

如果它们是两个碰巧同名的独立变量,那么您应该将它们声明为静态的,以便它们仅在编译单元内可见。

static const char * FILENAME = "a/file/name";

发生这种情况的原因是,隐式静态仅适用于 const 对象。虽然您的指针不是 const,只有引用的对象是 const。

要做到这一点,你必须写:

const char * const FILENAME = "a/file/name";

关于c++ - 单独翻译单元中的两个变量违反了一个定义规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32755692/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com