在不同的翻译单元中的两个变量违反了一个定义规则
Two variables in seperate translation units are violating the one definition rule?
我在两个.cpp文件中定义了一个变量const char * FILENAME = "a/file/name"
,称为a.cpp
和b.cpp
。没有直接包含这些文件,它们只分别包含了a.h
和b.h
。这两个头文件随后都包含在main.cpp
我的问题是,我得到以下链接错误:
a.obj : error LNK2005: "char const * const FILENAME" (?FILENAME@@3PBDB) already defined in 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++ 如何将两个 makefile 对象目标规则(位于另一个文件夹中)合并到一个目标/规则中?
- 为什么复制省略是"好像"规则的一个例外
- 一个定义规则 - 编译
- 为什么传递给函数 set::itrator 而不是 const_iterator 违反了一个定义规则?
- 内联函数和一个定义规则
- 如何在C 中应用ODR(一个定义规则)
- 为什么这不违反一个定义规则
- 从标准库重新定义函数是否违反了一个定义规则
- 是否使用“ __Date__”或“ __Time__”违反了一个定义规则
- 非静态数据成员和一个定义规则
- 对于C++,在另一个函数中定义一个函数的可行性规则是什么?
- 在类中使用'const'和在C++中使用运算符重载是否有一个好的规则?
- C++:同名的文件范围常量违反了一个定义规则
- 一个定义规则是否强制创建一个静态函数变量
- 当一个规则使用BOOST_FUSION_ADAPT_STRUCT时,精神因果报应语法问题
- 全局std::字符串和一个定义规则
- 使用生成文件使用一个规则编译多个文件类型
- C++ 设计一个对象,使其采用变量值和规则来应用于它们