如何在 C++ 中定义内联自由函数(非成员函数)?
How to define an inline free function (non member function) in C++?
在C++中,我需要定义一些内联通用函数。
但是,当我在头文件中编写原型并在 a.cpp 文件中编写实现时,我遇到了 "LNK2001 unresolved external symbol" 错误。
要不要去掉.cpp文件,在头文件中实现函数?
我正在尝试定义一些可供其他 类 使用的共享非成员数学函数。
Header file:
inline void foo()
{
//some code
}
.cpp file
//nothing
如果您希望函数成为 in-line,则必须在 header 中提供定义。如果你把它放在一个单独的 cpp 文件中,它就不会是 in-lined。 link 错误通常是由于在 linking 阶段没有包含 cpp 文件。
inline
说明符的名称有些误导,因为它暗示函数是内联的。但是,inline
首先指定了函数的 链接 (这也是对编译器考虑内联的提示)。对于声明为 inline
的函数,编译对象中不会生成任何可链接符号。
因此,inline
函数只有在头文件中 定义 (不仅仅是声明)时才有意义,该头文件可能包含在许多编译单元中。 inline
说明符会阻止编译器在相应的目标文件中为该函数发出多个(实际上是 any)符号。
如果你只需要一个编译单元一次的小函数,你不需要在其他地方声明它。而且,你不需要将它声明为内联,而是将它放在匿名命名空间中以防止它可见(在生成的目标文件中)。
所以,要么(这很可能是您的用例)
// foo.hpp:
inline void foo(bar x) { /* ... */ } // full definition
// application.cpp:
#include "header.hpp"
/* ... */ foo();
或
// application.cpp:
namespace {
inline void foo(bar x) // inline specifier redundant
{ /* ... */ }
}
/* ... */ foo();
在C++中,我需要定义一些内联通用函数。 但是,当我在头文件中编写原型并在 a.cpp 文件中编写实现时,我遇到了 "LNK2001 unresolved external symbol" 错误。
要不要去掉.cpp文件,在头文件中实现函数?
我正在尝试定义一些可供其他 类 使用的共享非成员数学函数。
Header file:
inline void foo()
{
//some code
}
.cpp file
//nothing
如果您希望函数成为 in-line,则必须在 header 中提供定义。如果你把它放在一个单独的 cpp 文件中,它就不会是 in-lined。 link 错误通常是由于在 linking 阶段没有包含 cpp 文件。
inline
说明符的名称有些误导,因为它暗示函数是内联的。但是,inline
首先指定了函数的 链接 (这也是对编译器考虑内联的提示)。对于声明为 inline
的函数,编译对象中不会生成任何可链接符号。
因此,inline
函数只有在头文件中 定义 (不仅仅是声明)时才有意义,该头文件可能包含在许多编译单元中。 inline
说明符会阻止编译器在相应的目标文件中为该函数发出多个(实际上是 any)符号。
如果你只需要一个编译单元一次的小函数,你不需要在其他地方声明它。而且,你不需要将它声明为内联,而是将它放在匿名命名空间中以防止它可见(在生成的目标文件中)。
所以,要么(这很可能是您的用例)
// foo.hpp:
inline void foo(bar x) { /* ... */ } // full definition
// application.cpp:
#include "header.hpp"
/* ... */ foo();
或
// application.cpp:
namespace {
inline void foo(bar x) // inline specifier redundant
{ /* ... */ }
}
/* ... */ foo();