为什么我的内联函数有链接错误?



我正在学习C++,目前正在测试内联函数。如果我现在运行我的代码,我将出现链接错误,但如果我更改
inline void Test::print40()void Test::print40()一切都会好起来的。你能向我解释为什么我有一个错误以及如何在这种情况下使用内联函数吗?

// main.cpp file
#include "Test.h"
using namespace std;
int main()
{
Test obj1;
obj1.print40();
}
// Test.cpp file
#include <iostream>
#include "Test.h"
inline void Test::print40()
{
std::cout << "40";
}
// Test.h file
#pragma once
class Test
{
public:
void print40();
};

内联函数定义应位于使用 ODR 的每个编译单元中。

另一方面,在您的项目中,编译单元 main 不知道该函数是内联函数。所以它找不到它的定义。

将此定义从Test.cpp移出

#pragma once
class Test
{
public:
void print40();
};
inline void Test::print40()
{
std::cout << "40";
}

到标题Test.h.

模块Test.cpp是冗余的。

由于该函数非常简单且简短,因此可以在类定义中定义,例如

class Test
{
public:
void print40()
{
std::cout << "40";
}
};

在这种情况下,默认情况下它将是一个内联函数。

相关内容

  • 没有找到相关文章

最新更新