链接器在头文件中定义非内联函数时出错?

yes*_*aaj 6 c++ header function definition

带有警卫的头文件中定义的非内联函数

#if !defined(HEADER_RANDOM_H)
#define HEADER_RANDOM_H 
void foo()
{
//something
}
#endif
Run Code Online (Sandbox Code Playgroud)

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

小智 10

如果标题包含在多个源文件中,并且该函数未标记为"内联",则您将拥有多个定义.包含保护仅防止同一源文件中的多个包含.


ava*_*kar 8

您违反了一个定义规则.如果要直接在标题中定义函数,则必须将其标记为inline- 这将允许多次定义函数.另请注意,inline没有其他含义,特别是它不会强制编译器内联调用(与普遍看法相反).