我写了以下三个文件:numeros.h,numeros.cpp和main.cpp。
我想在numeros.cpp中定义body类之外的内联函数。 根据{{3}}可以将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&gt; main.obj:错误LNK2019:símboloexterno“public:int __thiscall Numeros :: valor(void)“(?valor @ Numeros @@ QAEHXZ)sin resolver al que se hace referencia enlafunción_main1&gt; c:\ users \ pablo \ documents \ visual studio 2015 \ Projects \ Project6 \ Debug \ Project6.exe:致命错误 LNK1120:1 externos sin resolver
在Qt Creator 3.5.1上构建错误:
C:\用户\巴勃罗\收存箱\ QtProjects \的Windows \集结名字-Desktop_Qt_5_5_1_MinGW_32bit-调试\调试\ main.o:-1: 在函数`main'中:
C:\ Users \ Pablo \ Dropbox \ QtProjects \ Windows \ untitled \ main.cpp:13:错误: 未定义的引用`Numeros :: valor()'
collect2.exe:-1:错误:错误:ld返回1退出状态
答案 0 :(得分:1)
在调用该函数的任何地方,内联函数的定义必须是可见的。编译器抱怨的问题是Numeros::valor
中main
的定义不可见。为了解决这个问题,定义必须放在标题中,否则你不必将其标记为内联。