0

我有一个像这样的简单 .h 文件:

//test.h
int x = 12;

例如,如果我在其中包含此文件,main.cpp链接functions.cpp器将产生此错误,这是合理的:

error LNK2005: "int x" (?x@@3HA) already defined in functions.obj

但是当我改变变量定义时:

//test.h
const int x = 12;

链接器错误消失。方式?

4

1 回答 1

5

const在具有内部链接的命名空间范围内声明的名称。也就是说,您包含的每个文件test.h都有自己的对象,名为x. 见§7.1.1/7:

在没有存储类说明符的命名空间范围内声明的名称具有外部链接,除非它由于先前的声明而具有内部链接并且如果它没有被声明const。已声明const和未显式声明的对象extern具有内部链接。

于 2013-02-27T18:52:37.893 回答