内联函数链接错误C ++

时间:2014-04-20 17:07:14

标签: c++ linkage inline-functions

请考虑以下代码:

在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'关键字,编译和运行将继续进行而不会出错。

请告诉我为什么我的“内联”功能会出现链接错误?

1 个答案:

答案 0 :(得分:3)

您编写它的方式,内联适用于当前文件范围。当内联函数在头文件中时,该头文件包含在一个cpp文件中,然后该函数被内联在该文件的范围内,因此没有问题。在这种情况下,只有在定义它的情况下,您的函数才可以内联,并且除了作为其类中的常规成员声明之外,没有其他cpp文件可以看到它,因此链接错误。

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