3

在啊:

#ifndef A_h
#define A_h

#include "string"

extern std::string a;

#endif

在 A.cpp 中,在全局范围内:

#include "A.h"

std::string a = "a";
4

2 回答 2

3

您没有重新定义变量,因为您的代码只有一个定义 - CPP 文件中的那个。标题中的一个是声明,因为它使用extern关键字。CPP 文件为标头中声明的变量提供定义。

于 2013-08-11T13:05:48.737 回答
1

可以这样想:编译器看到 A.cpp 一次,而且只有一次。如果您的项目有许多#included Ah 的源文件,编译器会看到 Ah 多次,每个 #include 一次,因为它处理所有 *.cpp 文件。在这种情况下,有一个定义和多个声明是合乎逻辑的

你所拥有的是正确的 - A.cpp 中全局范围内的变量。作为全局和非静态的,它有可能在其他地方使用。事实上,如果它不在其他地方使用,它会污染命名空间。

于 2013-08-11T13:14:33.550 回答