内联过载抛出错误c ++

Ser*_*ano 1 c++ overloading inline visual-studio

我正在学习重载内联函数.

在测试这段代码时,我无法使用以下错误进行编译,我无法理解错误.

我只用一个内联功能测试它,然后工作但第二次打破它.你能否请一些指导:

谢谢你的帮助,塞尔吉奥

编译器错误:

  • abs异常规范与先前的声明行13不匹配
  • function long abs(const long)throw()已经有了body line 13
  • abs重新定义; 不同的异常规范行19
  • 函数定义或声明中的abs错误; 功能不称为第30行
  • 函数定义或声明中的abs错误; 函数不称为第32行

#include "pch.h"
#include <iostream>
using namespace std;

// Overload abs() three ways
inline int abs(int n)
{
    cout << "In integer abs() \n";
    return((n < 0) ? -n : n);
}

inline long abs(long n)
{
    cout << "In long abs() \n";
    return((n < 0) ? -n : n);
}


inline double abs(double n) {
    cout << "In double abs() \n";
    return ((n < 0 ? -n : n));
}


int main()
{
    cout << "Absolute value of -10 Is ";
    cout << abs(-10) << "\n";
    cout << "Absolute value of -10L Is ";
    cout << abs(-10L) << "\n";
    cout << "Absolute value of -10.01 Is ";
    cout << abs(-10.01) << "\n";
}
Run Code Online (Sandbox Code Playgroud)

Wal*_*ter 5

你的错误在这里:

using namespace std;
Run Code Online (Sandbox Code Playgroud)

因为这会带来全局命名空间函数的定义重载std::abs()(它们被声明和定义,cmath其中似乎是#include直接或间接地iostream),然后与您自己的定义冲突.上面的语句(using namespace std;)几乎从来都不是一个好主意,当然不是在头文件中 - 遗憾的是,它常用于在线编码竞赛中以简化代码(不需要std::).

顺便说一句,这只是inline因为函数定义(不是声明)冲突,必须inline在头文件中声明才能获得正确的链接.