为什么我的内联函数有链接错误?
Why my inline functions have linking error?
我正在学习 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";
}
到header Test.h
.
模块Test.cpp
是多余的。
由于函数非常简单和简短,因此可以在class定义中定义,例如
class Test
{
public:
void print40()
{
std::cout << "40";
}
};
在这种情况下,默认情况下它将是一个内联函数。
我正在学习 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";
}
到header Test.h
.
模块Test.cpp
是多余的。
由于函数非常简单和简短,因此可以在class定义中定义,例如
class Test
{
public:
void print40()
{
std::cout << "40";
}
};
在这种情况下,默认情况下它将是一个内联函数。