Я читал о встроенных функциях и о том, как они могут иметь несколько определений в разных единицах перевода, но эти определения должны быть одинаковыми.
Итак, я подумал, что если я объявил в заголовочном файле функцию и определил ее в 2 файлах cpp как inline, компилятор не разозлился бы.
Поэтому я попытался сделать следующее:
global.h
#ifndef DRAKOS_GLOBAL_H
#define DRAKOS_GLOBAL_H
#include <iostream>
void fct();
#endif //DRAKOS_GLOBAL_H
file1.cpp
#include "global.h"
inline void fct()
{
std::cout << "file1.cpp \n";
}
main.cpp
#include "global.h"
extern void fct();
int main()
{
fct();
}
Построение ---> Ошибка:
неопределенная ссылка на `fct () '
Хорошо, я посмотрел в Google и прочитал, что
Обязательно, чтобы определение функции было помещено в заголовок
файл, если только функция не используется только в одном файле .cpp.
До сих пор все понятно и логично, но вопрос в том, помещу ли я определение в заголовочный файл; у каждого TU будет одно и то же определение, я не смогу определить две версии встроенной функции, скажем, одну в TU file1.cpp, а вторую - в main.cpp.
Итак, вопрос 1: почему они говорят, что для встроенной функции могут иметь определения множественных значений в разных TU, но они должны быть одинаковыми (как если бы я поместил определение в заголовок, оно будет и не может быть другим в cpp файл)
вопрос 2: Если это возможно сделать и определить несколько определений встроенной функции (из-за неправильного понимания с моей стороны), может быть, кто-то из них, PLZ, покажет простой пример:)
Заранее спасибо