内联函数链接错误C++



考虑以下代码:

在标题.h 中

#pragma once
class someClass
{
public:
    void foo();
};

在header.cpp 中

#include "header.h"
inline void someClass::foo(){}

在main.cpp 中

#include <iostream>
#include "header.h"
using namespace std;
int main()
{
    someClass obj;
    obj.foo();
}

这里我得到了一个链接错误,因为foo函数在header.cpp中被定义为inline,如果我删除"inline"关键字,编译和运行将继续进行而不会出错。

请告诉我为什么我在这个"内联"函数上得到链接错误?

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

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

相关内容

  • 没有找到相关文章

最新更新