Kho*_*Ali 1 c++ inline non-member-functions
在C++中,我需要定义一些内联通用函数。但是,当我在头文件中编写原型并在 .cpp 文件中编写实现时,遇到“LNK2001 无法解析的外部符号”错误。
我要删除.cpp文件并在头文件中实现该功能吗?
我正在尝试定义一些可供其他类使用的共享非成员数学函数。
头文件:
inline void foo()
{
//some code
}
Run Code Online (Sandbox Code Playgroud)
.cpp 文件
//nothing
Run Code Online (Sandbox Code Playgroud)
说明符的名称inline有些误导,因为它表明该函数是内联的。然而,inline最重要的是指定函数的链接(这也是编译器考虑内联的提示)。对于声明的函数,inline在编译对象中不会生成可链接符号。
因此,函数只有在头文件中定义(而不仅仅是声明)inline时才有意义,而头文件可能被许多编译单元包含。说明符会阻止编译器在相应的目标文件中发出此函数的多个(实际上是任何)符号。inline
如果一个小函数只需为一个编译单元使用一次,则无需在其他地方声明它。此外,您不需要将其声明为内联,而是将其放置在匿名名称空间中以防止其可见(在生成的目标文件中)。
所以,要么(这很可能是你的用例)
// foo.hpp:
inline void foo(bar x) { /* ... */ } // full definition
// application.cpp:
#include "header.hpp"
/* ... */ foo(X);
Run Code Online (Sandbox Code Playgroud)
或者
// application.cpp:
namespace {
inline void foo(bar x) // inline specifier redundant
{ /* ... */ }
}
/* ... */ foo(X);
Run Code Online (Sandbox Code Playgroud)