linkage — встроенные функции link link переполнение стека

Рассмотрим следующий код:

В 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’, компиляция и запуск будут продолжаться без ошибок.

Скажите, пожалуйста, почему я получаю ошибку ссылки на эту встроенную функцию?

1

Решение

То, как вы это написали, встраивается в текущую область файла. Когда встроенная функция находится в заголовке, этот заголовок включается в файл cpp, а затем функция встраивается там, где она используется в области действия этого файла, поэтому проблем не возникает. В этом случае ваша функция доступна как встроенная только там, где она определена, и никакой другой файл cpp не видит ее, кроме как в качестве регулярного объявления члена в своем классе, отсюда и ошибка ссылки.

Если вы хотите, чтобы он был встроенным, добавьте код и ключевое слово inline в заголовок.

3

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


По вопросам рекламы [email protected]