когда мы определяем функцию-член класса в заголовочном файле этого класса, тогда необходимо использовать встроенное ключевое слово. Зачем?

я определил класс в заголовочном файле и реализовал его функцию в том же заголовочном файле.
но при определении этих функций я должен поставить ключевое слово inline с определением функции. В противном случае компилятор выдал ошибку времени компиляции.

Я знаю, что inline — это только подсказка компилятору. Итак, почему необходимо поместить встроенное ключевое слово с определением функции.

Я использую Visual Studio компилятор с QT для компиляции кода

вот код

tempinline.h

#ifndef TEMPINLINE_H
#define TEMPINLINE_H
#include "iostream"class tempinline
{
public:
tempinline();
void printH();
};
void tempinline::printH()
{
std::cout << "hhhh";
}

#endif // TEMPINLINE_H

tempinline.cpp

#include "tempinline.h"
tempinline::tempinline()
{
}

main.cpp

#include <iostream>
#include "tempinline.h"
using namespace std;

int main()
{
tempinline aa;
aa.printH();
cout << "Hello World!" << endl;
return 0;
}

ошибка

OUT:debug\tempinline.exe @C:\Users\utrade\AppData\Local\Temp\8\tempinline.exe.8256.687.jom
LINK : debug\tempinline.exe not found or not built by the last incremental link; performing full link
tempinline.obj : error LNK2005: "public: void __thiscall tempinline::printH(void)" (?printH@tempinline@@QAEXXZ) already defined in main.obj
debug\tempinline.exe : fatal error LNK1169: one or more multiply defined symbols found
jom: C:\Users\utrade\build-tempinline-Desktop-Debug\Makefile.Debug [debug\tempinline.exe] Error 1169
jom: C:\Users\utrade\build-tempinline-Desktop-Debug\Makefile [debug] Error 2
18:36:20: The process "C:\Qt\qtcreator-3.0.0\bin\jom.exe" exited with code 2.
Error while building/deploying project tempinline (kit: Desktop)
When executing step 'Make'

0

Решение

сделав много попыток, я смог скомпилировать свой код
я комментирую код в tempinline .cpp а также комментарий
конструктор timeinline(); декларация.
Так что здесь происходит, когда я включаю заголовочный файл более одного раза в проект, а затем компилятор видит несколько определений void tempinline::printH() функция. поэтому компилятор не смог узнать, какая функция связана, и выдал ошибку компоновщика.

Но если мы укажем встроенное ключевое слово с функцией, которая inline void tempinline::printH() затем из-за поведения встроенного ключевого слова компилятору не нужно связывать эту функцию из-за замены (встроенного свойства) кода, который находится в функции, на то, где она будет вызываться

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector