请考虑以下代码:
在header.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'关键字,编译和运行将继续进行而不会出错。
请告诉我为什么我的“内联”功能会出现链接错误?
答案 0 :(得分:3)
您编写它的方式,内联适用于当前文件范围。当内联函数在头文件中时,该头文件包含在一个cpp文件中,然后该函数被内联在该文件的范围内,因此没有问题。在这种情况下,只有在定义它的情况下,您的函数才可以内联,并且除了作为其类中的常规成员声明之外,没有其他cpp文件可以看到它,因此链接错误。
如果您希望它是内联的,请在标题中添加代码和内联关键字。