我是初学者,我的英语不太好,所以先抱歉。 1.我试图编译这段代码,我不明白问题 - 函数div返回'double',所以为什么我不能写这行:“sum = div(x,y);” ?我试图在这里找到答案并谷歌它但它不起作用。 2.除此之外,有人知道这个问题的解决方案是什么 - 1>完成建筑项目“test.vcxproj” - 失败。 ? 谢谢你的答案!
#pragma once
#include <iostream>
#include <string.h>
using namespace std;
class DivisionByZero
{
private:
const char* zero_description = "error: division by zero";
public:
const char* getZero() {return zero_description;}
void printZero() { cout << getZero() << endl; }
};
double div(double x, double y) throw(int, DivisionByZero) {
if (x < y)
throw - 1;
if (y == 0)
throw DivisionByZero();
cout << x / y << endl;
return x / y;
}
#include "DivisionByZero.h"
using namespace std;
int main()
{
try {
int x, y;
double sum;
cout << "insert x and y values" << endl;
cin >> x >> y;
sum= div(x, y);
}
catch (int a) {
if (a == -1)
cout << "x is smaller than y" << endl;
}
catch (DivisionByZero& c) {
c.printZero();
}
catch (...) {
cout << "unknown error" << endl;
}
return 0;
}
答案 0 :(得分:1)
问题是标准库还包含a div
function,它需要两个ints
并返回div_t
结构。由于您在int
函数调用中传递了两个div(x, y)
,因此重载决策会在您自己的std::div
函数上选择div
。因此,您最终会尝试将div_t
结构分配给double
变量,这会导致您看到错误消息。
有些编译器还会将div
带入顶级命名空间(我不确定这是否由标准定义),因此即使没有using namespace std;
,这也许并不总是有效。 / p>
最简单的解决方法(对于阅读代码的其他人来说最不容易混淆)只是将您自己的div
函数重命名为其他内容。
这是using namespace std;
被某些人不赞同的原因之一。将using namespace
指令放在头文件中是特别糟糕的做法,因为它们污染了包括该头文件在内的任何源文件的范围。 (我假设您的代码段的第一部分实际上是DivisionByZero.h
的内容。)