为什么不能在 .cpp 文件中内联函数定义?

And*_*kas 1 c++ linker inline inline-functions

为什么不能在 .cpp 文件中内联函数或类成员函数定义?例如,在我下面的测试示例中,如果我尝试在 cpp 文件中内联函数或类成员定义,链接器会给我一个未定义的引用错误:

测试.h

void print();

class A
{
    public:
        void print() const;
};
Run Code Online (Sandbox Code Playgroud)

测试.cpp

#include <test.h>

inline void print()
{
    // implementation
}

inline void A::print() const
{
    // implementation
}
Run Code Online (Sandbox Code Playgroud)

主程序

#include <test.h>

int main(int argc, char** argv)
{
    print(); // undefined reference to `print()'
    A a;
    a.print(); // undefined reference to `A::print() const'

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在这里阅读了一些答案,但我仍然不确定它是如何工作的。

Gal*_*lik 7

问)为什么不能在 .cpp 文件中内联函数定义?

可以cpp文件中内联函数。

您不能做的是inline不同的 cpp文件访问这些功能。

一个内联函数必须在出现的每个文件,使用它。这就是为什么它们经常放在头文件中的原因,因此任何需要使用它的源都包含包含它的头文件。