在 .cpp 中定义类主体之外的内联函数
Posted
技术标签:
【中文标题】在 .cpp 中定义类主体之外的内联函数【英文标题】:Defining Inline function outside the class body, in .cpp 【发布时间】:2015-12-12 08:16:54 【问题描述】:我写了以下三个文件:numeros.h、numeros.cpp和main.cpp。
我想在 numeros.cpp 中定义 body 类之外的内联函数。 根据https://isocpp.org/wiki/faq/inline-functions#where-to-put-inline-keyword 把inline 关键字放在定义前就可以了。奇怪的是,如果我删除 inline 关键字,程序就会编译。
//numeros.h
#ifndef NUMEROS_H
#define NUMEROS_H
class Numeros
public:
Numeros();
int valor();
private:
int x;
;
#endif
-
//numeros.cpp
#include "numeros.h"
Numeros::Numeros()
x = 10;
inline int Numeros::valor()
return x;
-
//main.cpp
#include "numeros.h"
#include <iostream>
using namespace std;
int main()
Numeros n1;
cout<< n1.valor();
cin.get();
return 0;
编辑:
Visual Studio 2015 上的构建错误:
1>main.obj : 错误 LNK2019: símbolo externo "public: int __thiscall Numeros::valor(void)" (?valor@Numeros@@QAEHXZ) sin resolver al que se hace referencia en la función _main 1>c:\users\pablo\documents\visual 工作室 2015\Projects\Project6\Debug\Project6.exe:致命错误 LNK1120: 1 个外部罪恶解析器
Qt Creator 3.5.1 上的构建错误:
C:\Users\Pablo\Dropbox\QtProjects\Windows\build-untitled-Desktop_Qt_5_5_1_MinGW_32bit-Debug\debug\main.o:-1: 在函数'main'中:
C:\Users\Pablo\Dropbox\QtProjects\Windows\untitled\main.cpp:13: 错误: 对 `Numeros::valor()' 的未定义引用
collect2.exe:-1: 错误:错误:ld 返回 1 个退出状态
【问题讨论】:
如果发布与构建错误相关的问题,请始终在问题正文中包含完整的构建日志(完整且未经编辑)。 还要注意inline
关键字只是编译器的一个建议,它可以忽略。另外,它只会影响当前的translation unit。
@JoachimPileborg 我把构建错误放在这里。对,我知道。谢谢:)
@Gernot1976 我刚刚尝试过,但错误仍然存在。
非常相关:***.com/questions/5057021。简短版本:将inline
视为“我想将此定义放在头文件中”而不是“我希望您尝试'内联'此函数”更有帮助。使用编译器和链接器优化设置是鼓励实现内联非头源文件中定义的函数的更好方法。
【参考方案1】:
内联函数的定义必须在任何调用该函数的地方可见。编译器抱怨的问题是Numeros::valor
的定义在main
中不可见。为了解决这个问题,定义必须放在标题中,或者您不必将其标记为内联。
【讨论】:
以上是关于在 .cpp 中定义类主体之外的内联函数的主要内容,如果未能解决你的问题,请参考以下文章