C++操作struct报conversion from 'double' to non-scalar type错误原因
错误含义说明
error: conversion from 'double' to non-scalar type '' requested
该报错的核心是C++不支持double标量类型到自定义结构体Number非标量类型的隐式转换:你尝试用一个double类型的返回值直接初始化Number类型的变量,触发了类型不匹配的编译错误。
其中标量类型指算术类型、指针、枚举等单值基础类型,自定义结构体属于聚合非标量类型,无法直接用单个数值完成初始化。
代码问题梳理
zmiana函数返回值类型为double,但main函数中使用该返回值初始化Number类型的number2,二者类型完全不匹配,是触发编译错误的直接原因- 当前main函数中
cout<<&number2的逻辑是打印number2的内存地址,和你预期输出4 3.14的要求不符 - 你要求不能修改main函数的任何代码,因此只能通过调整
zmiana函数的定义解决编译问题
修复方案
仅修改zmiana函数的返回值类型和返回逻辑即可解决编译错误,修改后的代码如下:
Number zmiana(Number *number,double scale){ number->a *= scale; // 直接返回修改后的结构体,匹配main中Number类型变量的初始化要求 return *number; }
修改后编译可正常通过,但受限于不能修改main函数的要求,原代码的cout语句只会输出number2的内存地址,无法输出4 3.14。若要得到预期输出,需要将main函数中的cout语句调整为cout << number2.a << " " << number2.b;。
内容的提问来源于stack exchange,提问作者lelumpolelum
相关产品推荐
相关产品推荐

