gpt4 book ai didi

c++ - 错误 C2440 : '=' : cannot convert from 'div_t' to 'double'

转载 作者:行者123 更新时间:2023-11-30 05:10:25 29 4
gpt4 key购买 nike

我是初学者,我的英语不是很好,首先抱歉。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;
}

最佳答案

问题是标准库还包含a div function ,它接受两个 int 并返回一个 div_t 结构。因为您在 div(x, y) 函数调用中传递了两个 int,所以重载解析会选择 std::div 而不是您自己的div 函数。因此,您最终尝试将 div_t 结构分配给 double 变量,这会导致您看到错误消息。

一些编译器还将 div 带入顶级命名空间(我不确定这是不是标准定义的),所以即使没有 using namespace std;这可能并不总是有效。

最简单的解决方法(并且对其他阅读您的代码的人来说最不容易混淆)就是将您自己的 div 函数重命名为其他名称。

这是 using namespace std; 被一些人反对的原因之一。将 using namespace 指令放在头文件中是特别糟糕的做法,因为它们会污染包括该头文件在内的任何源文件的范围。 (我假设您的代码片段的第一部分实际上是 DivisionByZero.h 的内容。)

关于c++ - 错误 C2440 : '=' : cannot convert from 'div_t' to 'double' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45688700/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com