【发布时间】:2016-09-27 11:57:22
【问题描述】:
我正在使用
中定义的一些常量常量.h
#ifndef __CONSTANTS_H__
#define __CONSTANTS_H__
namespace A{
namespace B{
const int FIRST = 1;
const int SECOND = 2;
}
}
#endif
我从 2 个不同的 .cpp(A.cpp 和 B.cpp)中包含此文件
gcc 3.2.3 版给了我“多重定义”链接错误
我只通过包含另一个“File.h”来解决问题,其中包含“Constants.h”并声明与“extern”相同的常量
有人可以解释为什么吗?我认为这是 C 中的问题,而不是 C++
【问题讨论】:
-
添加标题保护或#pragma once
-
@Sugar 我认为这无济于事。
-
这些常量是什么类型的?如果您在头文件中声明变量,它们将在包含该头文件的每个编译单元中实例化。有很多方法可以解决这个问题,但通常当人们在标头中声明变量(常量或非常量)时,他们会在 .c 文件中定义它们。您的
extern只是向编译器承诺变量是在其他地方定义的,并且链接器会期望在编译对象中的某个地方找到它们。 -
@CoryKramer 你确定吗?
const变量应该具有每个 this 的内部链接 -
@Danh。这是 C++ 而不是 C,C 没有命名空间?具有未声明类型的 C++,称为 FIRST 和 SECOND :)