2015-12-12 2 views
0

Я пишу следующие три файла: numeros.h, numeros.cpp и main.cpp.Определение функции Inline вне тела класса, в .cpp

Я хочу определить встроенную функцию вне класса body, в численном виде. Cpp. В соответствии с https://isocpp.org/wiki/faq/inline-functions#where-to-put-inline-keyword До определения ключевого слова inline можно поставить ключевое слово 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; 
} 

EDIT:

ошибка сборки на Visual Studio 2015:

1>main.obj : error LNK2019: símbolo externo "public: int __thiscall Numeros::valor(void)" ([email protected]@@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

+0

Если вы отправляете вопросы, связанные с ошибками сборки, то всегда указывайте полный журнал сборки (полностью и неотредактированный) в тексте вопроса. –

+0

Также обратите внимание, что ключевое слово 'inline' - это просто * предложение * для компилятора, которое можно игнорировать. Кроме того, это повлияет только на текущую [* переводную единицу *] (https://en.wikipedia.org/wiki/Translation_unit_%28programming%29). –

+0

Поместите 'inline' в свою декларацию, а не на вашу реализацию. – Rabbid76

ответ

1

Определение встроенной функции должна быть видна везде, где эта функция вызывается. Проблема, о которой компилятор жалуется, заключается в том, что определение Numeros::valor не отображается в main. Чтобы исправить это, определение должно идти в заголовке, или вы не должны указывать его в строке.