内联函数链接错误 C++

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' 关键字,编译和运行将继续没有错误。

请告诉我为什么这个“内联”函数出现链接错误?

DNT*_*DNT 5

您编写的方式,内联适用于当前文件范围。当内联函数位于标头中时,该标头将包含在 cpp 文件中,然后该函数会内联到该文件范围内使用的位置,因此不会出现问题。在这种情况下,您的函数仅在定义的地方作为内联可用,并且除了作为其类中的常规成员声明之外,其他 cpp 文件都看不到它,因此会出现链接错误。

如果您希望它是内联的,请在标题中添加代码和 inline 关键字。