考虑以下代码:
在标题.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文件都看不到它,因此会出现链接错误。
如果您希望它是内联的,请在标题中添加代码和内联关键字。