Edu*_*yan 2 c++ inline-functions linkage
考虑以下代码:
在 header.h 中
#pragma once
class someClass
{
public:
void foo();
};
Run Code Online (Sandbox Code Playgroud)
在头文件.cpp中
#include "header.h"
inline void someClass::foo(){}
Run Code Online (Sandbox Code Playgroud)
在main.cpp中
#include <iostream>
#include "header.h"
using namespace std;
int main()
{
someClass obj;
obj.foo();
}
Run Code Online (Sandbox Code Playgroud)
这里我得到一个链接错误,因为 foo 函数在 header.cpp 中被定义为内联,如果我删除 'inline' 关键字,编译和运行将继续没有错误。
请告诉我为什么这个“内联”函数出现链接错误?
您编写的方式,内联适用于当前文件范围。当内联函数位于标头中时,该标头将包含在 cpp 文件中,然后该函数会内联到该文件范围内使用的位置,因此不会出现问题。在这种情况下,您的函数仅在定义的地方作为内联可用,并且除了作为其类中的常规成员声明之外,其他 cpp 文件都看不到它,因此会出现链接错误。
如果您希望它是内联的,请在标题中添加代码和 inline 关键字。
| 归档时间: |
|
| 查看次数: |
1453 次 |
| 最近记录: |