Встроенная функция должна быть в вашем заголовочном файле, а не в исходном, так что она может быть встроена вызывающими (у которых нет доступа к исходному файлу).
Более того, вы нене нужно указывать inline
в объявлении класса, если вы даете определение функции.
Таким образом, ваш заголовок должен стать:
class Math
{
public:
Math(void);
double returnPi() { return 3.14; } // no need to specify inline here
~Math(void);
};
И удалить определение для returnPi()
из вашего исходного файла.
Обратите внимание, что вы могли бы также сделать:
class Math
{
public:
Math(void);
double returnPi();
~Math(void);
};
inline double Math::returnPi() { return 3.14; } // inline is mandatory here to avoid respecting the "One Definition Rule"
Второе решение хорошо, если вы хотите отделить объявление класса от определения функции.
Также обратите внимание, что inline
не гарантирует, что фактические вызовы функций будут встроены: единственное, что он обеспечивает, - это то, что вам не нужно соблюдать «одно правило определения»: функция inline
должна иметьОдинаковое определение во всех единицах перевода.