Рассмотрим следующий код:
В header.h
#pragma once
class someClass
{
public:
void foo();
};
В header.cpp
#include "header.h"
inline void someClass::foo(){}
В main.cpp
#include <iostream>
#include "header.h"using namespace std;
int main()
{
someClass obj;
obj.foo();
}
Здесь я получаю ошибку ссылки, потому что функция foo определена как inline в header.cpp, если я удалю ключевое слово ‘inline’, компиляция и запуск будут продолжаться без ошибок.
Скажите, пожалуйста, почему я получаю ошибку ссылки на эту встроенную функцию?
То, как вы это написали, встраивается в текущую область файла. Когда встроенная функция находится в заголовке, этот заголовок включается в файл cpp, а затем функция встраивается там, где она используется в области действия этого файла, поэтому проблем не возникает. В этом случае ваша функция доступна как встроенная только там, где она определена, и никакой другой файл cpp не видит ее, кроме как в качестве регулярного объявления члена в своем классе, отсюда и ошибка ссылки.
Если вы хотите, чтобы он был встроенным, добавьте код и ключевое слово inline в заголовок.