请考虑以下头文件示例:shared_example.h
#ifndef SHARED_EX
#define SHARED_EX
const int Shared_Int = 1;
const char * Shared_CString = "This is a string";
#endif
Run Code Online (Sandbox Code Playgroud)
该shared_example.h文件包含在多个编译单元,从而导致链接器(正确地)抱怨说:
error LNK2005: "char const * const Shared_CString" (?Shared_CString@@3PBDB) already defined in First_Compilation_Unit.obj
从此文件中删除Shared_CString常量可消除此问题.
所以,我有两个问题.
首先,为什么Shared_Int常量不会触发相同的问题?
第二,允许单独的编译单元使用相同的常量字符串值的适当方法是什么?
MSN*_*MSN 16
第一个声明具有常数整数值.在C++中,const默认情况下具有内部链接.
第二个声明是指向const char.该声明const本身并不存在,并且没有其他链接说明符,因此它没有内部链接.如果您将声明更改为const char * const它将成为一个const指针const char并具有内部链接.