如何在C 中定义无线功能(非成员函数)
How to define an inline free function (non member function) in C++?
在C 中,我需要定义一些内联函数。但是,当我在标头文件中编写原型和在A.CPP文件中的实现时,我会遇到" LNK2001未解决的外部符号"错误。
我可以删除.cpp文件并在标题文件中实现函数吗?
我正在尝试定义一些可以由其他类使用的共享非成员数学功能。
标题文件:
inline void foo()
{
//some code
}
.cpp文件
//nothing
inline
指定符的名称有些误导,因为它表明该函数被嵌入。但是,inline
最不端的指定功能的链接(这也是对编译器的提示要考虑内线)。对于声明inline
的函数,在编译对象中没有生成可连接的符号。
因此,inline
仅在标题文件中定义(不仅是声明)时才有意义,该文件可能包含在许多汇编单元中。inline
指示符比编译器在相应对象文件中发出的此功能的多个(实际上)符号。
如果您只需要一个较小的函数才能用于一个编译单元,则无需在其他任何地方声明它。此外,您无需在线声明它,而是将其放在匿名名称空间中以防止其可见(在生成的对象文件中)。
所以,要么(这很可能是您的用例)
// foo.hpp:
inline void foo(bar x) { /* ... */ } // full definition
// application.cpp:
#include "header.hpp"
/* ... */ foo(X);
或
// application.cpp:
namespace {
inline void foo(bar x) // inline specifier redundant
{ /* ... */ }
}
/* ... */ foo(X);
如果您希望函数在线,则必须在标题中提供定义。如果您将其放在单独的CPP文件中,则不会在衬里。链接错误通常是由于在链接阶段期间不包括CPP文件。
相关文章:
- 类模板的成员功能的定义在单独的TU中完全专业化
- 升压信号2将插槽传递到成员功能以断开连接
- 多次实现成员功能
- 如何定义可变参数类模板的成员模板功能
- 私有成员数据不可用于公共成员功能
- 好友功能 - 成员无法访问
- 如何启用友元类的友元功能直接在C++中访问其私有成员
- 无法从好友功能访问类的私有成员?"ostream"不是"std"的成员?
- C++从成员类型中扣除类型的功能模板?
- 如何避免大多数成员功能相同的代码重复
- 无法访问公共功能? 没有指定成员?
- C 成员功能
- =删除用户定义的成员功能,除了构造函数,分配运算符C 11
- C 朋友课程和朋友成员功能
- C 函数调用包装器包含类成员功能作为模板参数
- 共享库中静态功能成员的破坏顺序
- 可以使用仅功能成员属性进行回调界面
- 虚拟方法与std ::功能成员变量在性能方面
- 虚拟继承和功能成员
- 指向功能成员和非成员的指针