Ser*_*ano 1 c++ overloading inline visual-studio
我正在学习重载内联函数.
在测试这段代码时,我无法使用以下错误进行编译,我无法理解错误.
我只用一个内联功能测试它,然后工作但第二次打破它.你能否请一些指导:
谢谢你的帮助,塞尔吉奥
编译器错误:
#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)
你的错误在这里:
using namespace std;
Run Code Online (Sandbox Code Playgroud)
因为这会带来全局命名空间函数的定义重载std::abs()(它们被声明和定义,cmath其中似乎是#include直接或间接地iostream),然后与您自己的定义冲突.上面的语句(using namespace std;)几乎从来都不是一个好主意,当然不是在头文件中 - 遗憾的是,它常用于在线编码竞赛中以简化代码(不需要std::).
顺便说一句,这只是inline因为函数定义(不是声明)冲突,必须inline在头文件中声明才能获得正确的链接.
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |