C++自定义equation类定义equation1函数时出现多数据类型声明报错
报错成因
- 直接触发本次报错的原因是成员函数
equation1的定义同时声明了float和void两个返回值类型,C++语法规定一个函数只能有一个返回值类型,多类型声明直接触发编译错误。 - 还存在隐藏的符号冲突问题:类定义中已经将
equation1声明为float类型的成员变量,你又将其作为成员函数名使用,二者重名会导致即使修复返回值问题后依然编译失败。 - 除此之外代码还存在多个会引发后续编译/运行异常的问题:
- C++中
^是位异或运算符,不是求平方运算符,l^2的逻辑完全错误,求平方需要写为l*l。 - 成员变量
b1初始化时,依赖的k、l、t三个变量还未赋值,属于未初始化变量访问,运行时会得到垃圾值。 - 计算根的代码括号不匹配,且运算优先级错误:
-l/2*k实际计算逻辑为(-l/2)*k,不是求根所需的-l/(2*k)。 - 输出语句存在
<<漏写为<的语法错误。
- C++中
修复方案
- 先删除多余的返回值类型:如果函数不需要返回值就统一使用
void,删掉float;如果需要返回浮点结果就删掉void,仅保留float。这里你的函数仅需要打印根结果,建议使用void,同时删掉最后的return (0);语句。 - 解决重名冲突:修改成员变量
float equation1;的名称,或者修改成员函数的名称,比如将函数名调整为calc_equation_root更符合语义。 - 逐一修复其余语法和逻辑错误。
修复后的示例代码如下:
#include <iostream> #include <cmath> using namespace std; class equation { public: int k; int l; int t; float x1_value; float x2_value; float b1; equation(); ~equation(); // 声明成员函数,返回值为void void calc_equation_root(); }; equation::equation() { // 构造函数中给k、l、t赋值后再计算b1,可根据需求修改赋值逻辑 k = 1; l = 3; t = 2; b1 = sqrt(l*l -4*k*t); } equation::~equation() {} // 仅保留一个返回值类型void,使用修改后的函数名 void equation::calc_equation_root() { if (b1 == 0) { x1_value = -l/(2*k); cout << "重根,值为:" <<x1_value <<endl; } else if (b1 > 0) { x1_value = (-l + sqrt(b1)) / (2*k); x2_value = (-l - sqrt(b1)) / (2*k); cout << "两个实根,x1为:"<< x1_value << " x2为:"<< x2_value <<endl; } else { cout <<"无实根,解为虚数"<<endl; } } // 调用示例 int main() { equation eq; eq.calc_equation_root(); return 0; }
内容的提问来源于stack exchange,提问作者LEe
相关产品推荐
相关产品推荐

