我正在学习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";
}
};
在这种情况下,默认情况下它将是一个内联函数。