在头文件中定义与守卫非内嵌函数

#if !defined(HEADER_RANDOM_H)
#define HEADER_RANDOM_H 
void foo()
{
//something
}
#endif

在链接器错误结果:在someother.obj文件中定义 使函数内联工作正常,但我无法理解为什么函数已经在第一种情况下示数了。

有帮助吗?

解决方案

如果报头被包括在多于一个的源文件和功能没有被标记为“内联”你将有一个以上的定义。所述防护装置包括仅防止多个夹杂物中的相同的源文件中的

其他提示

您违反的一个定义规则。如果您想直接在标题中定义一个函数,则必须将其标记为inline - 这将允许函数定义多次。还要注意的是inline有没有其他的意思,尤其是它不强制编译器内联调用(流行的看法相反)。

由于它不是内联,每个转换单元将具有被定义其自己导致功能的功能的拷贝多次。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top