Precense of using namespace std;
вызывает конфликт с функцией ::std::abs
. Однако избавление от using namespace std;
не решит проблему полностью.
Основной проблемой здесь является использование неуникального имени для функции в global
пространстве имен. abs
- это функция из стандартной библиотеки C, поэтому вы не должны использовать это имя для своих собственных функций. В противном случае вы можете получить сообщение об ошибке, если <stdlib.h>
включено где-то, или даже случайное неопределенное поведение из-за нарушения ODR.
Чтобы предотвратить конфликты имен в C ++, вы обычно должны определять новые функции в пользовательском пространстве имен:
n_sergio_solorzano_stuff
{
// Overload abs() three ways
inline int abs(int n)
{
...
или выберите глобально уникальные имена, когда вам нужно добавить что-то в глобальное пространство имен:
inline int sergio_solorzano_stuff_abs(int n)