如何在C++中定义内联自由函数(非成员函数)?

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)

Wal*_*ter 7

说明符的名称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)