我编写了以下三个文件:numeros.h、numeros.cpp 和 main.cpp。
我想在主体类之外的 numeros.cpp 中定义内联函数。 根据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 : error 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 studio 2015\Projects\Project6\Debug\Project6.exe : fatal error LNK1120: 1 externos sin resolver
在 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: In function `main':
C:\Users\Pablo\Dropbox\QtProjects\Windows\untitled\main.cpp:13: error: undefined reference to `Numeros::valor()'
collect2.exe:-1: error: error: ld returned 1 exit status
最佳答案
内联函数的定义必须在调用该函数的任何地方可见。编译器提示的问题是 Numeros::valor
的定义在 main
中不可见。为了解决这个问题,定义必须放在标题中,或者您不能将其标记为内联。
关于c++ - 在 .cpp 中的类主体外部定义内联函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34237751/