在具有在头文件中定义的非内联函数链接错误?
-
21-08-2019 - |
题
在头文件中定义与守卫非内嵌函数
#if !defined(HEADER_RANDOM_H)
#define HEADER_RANDOM_H
void foo()
{
//something
}
#endif
在链接器错误结果:在someother.obj文件中定义 使函数内联工作正常,但我无法理解为什么函数已经在第一种情况下示数了。
解决方案
如果报头被包括在多于一个的源文件和功能没有被标记为“内联”你将有一个以上的定义。所述防护装置包括仅防止多个夹杂物中的相同的源文件中的
其他提示
您违反的一个定义规则。如果您想直接在标题中定义一个函数,则必须将其标记为inline
- 这将允许函数定义多次。还要注意的是inline
有没有其他的意思,尤其是它不强制编译器内联调用(流行的看法相反)。
由于它不是内联,每个转换单元将具有被定义其自己导致功能的功能的拷贝多次。
不隶属于 StackOverflow