Я пишу следующие три файла: 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
Если вы отправляете вопросы, связанные с ошибками сборки, то всегда указывайте полный журнал сборки (полностью и неотредактированный) в тексте вопроса. –
Также обратите внимание, что ключевое слово 'inline' - это просто * предложение * для компилятора, которое можно игнорировать. Кроме того, это повлияет только на текущую [* переводную единицу *] (https://en.wikipedia.org/wiki/Translation_unit_%28programming%29). –
Поместите 'inline' в свою декларацию, а не на вашу реализацию. – Rabbid76