在.cpp中定义类主体外部的内联函数

时间:2015-12-12 08:16:54

标签: c++ inline definition

我写了以下三个文件: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退出状态

1 个答案:

答案 0 :(得分:1)

在调用该函数的任何地方,内联函数的定义必须是可见的。编译器抱怨的问题是Numeros::valormain的定义不可见。为了解决这个问题,定义必须放在标题中,否则你不必将其标记为内联。