函数从指针 c++ 中获取错误的值并返回错误的答案
Function takes wrong values from pointers c++ and returns wrong answer
我刚开始学习编程,遇到了一些麻烦。这是我正在尝试做的:
- 使用构造函数创建一个新类;
- 将用户的两个数字写入类对象;
- 使用此类函数获取两个数字的总和;
但是由于某种原因,类函数采用一些奇怪的数字而不是类对象(我正在沿路检查它们(。
#include "pch.h"
#include <iostream>
#include <string>
using namespace std;
class math_function {
public:
string function_string;
double function_result;
};
class binary_operation : public math_function {
public:
double* argument_1;
double* argument_2;
};
class sum : public binary_operation {
public:
sum(double arg1, double arg2) {
this->argument_1 = &arg1;
this->argument_2 = &arg2;
cout << *this->argument_1 << " INSIDE CONSTR " << *this->argument_2 << "n";
}
double evaluate() {
cout << *this->argument_1 << " pointers " << *this->argument_2 << "n";
this -> function_result = *this->argument_1 + *this->argument_2;
return function_result;
}
};
int main(int argc, string argv)
{
cout << "enter two nubmersn";
double arg1, arg2;
std::cin >> arg1;
std::cin >> arg2;
sum* sum1 = new sum(arg1, arg2);
double result = sum1->evaluate();
cout << "n" << result;
system("Pause");
}
以下是控制台的输出:
enter two numbers
29
13
29 INSIDE CONSTR 13
-9.25596e+61 pointers 1.23419e-305
-9.25596e+61
我做错了什么?
这个
this->argument_1 = &arg1; // NO
与你想做的有点相反。您正在将指针成员设置为构造函数本地的arg1
地址。在您尝试打印值时,arg1
早已消失。如果有的话,你想要
*(this->argument_1) = arg1; // still NO
这会将arg1
的值分配给double
argument_1
指向的。但是,您从未分配过double
,因此argument_1
没有指向双精度。取消引用无效指针是未定义的行为!
干脆不要使用指针。最好使用初始值设定项列表...
struct binary_operation : public math_function {
double argument_1;
double argument_2;
binary_operatotion(double arg1,double arg2) : argument_1(arg1),argument_2(arg2) {}
};
struct sum : public binary_operation {
sum(double arg1, double arg2) : binary_operation(arg1,arg2) {}
};
您将传递给构造函数的两个参数的地址(按值(存储在参数 1 和 2 中。 一旦你退出函数,这些地址就不再有意义了(是的,构造函数(也是(一个函数。
你有不同的选择。 首先是将参数作为指针传递,而不是复制值
sum(double* arg1, double* arg2) {
this->argument_1 = arg1;
this->argument_2 = arg2;
cout << *this->argument_1 << " INSIDE CONSTR " << *this->argument_2 << "n";
}
但实际上,在你的情况下,你根本不需要指针:只需将参数存储为double
,而不是double*
class binary_operation : public math_function {
public:
double argument_1;
double argument_2;
};
并更改所有代码以使用double
而不是double*
(很简单,编译器将帮助您在旧代码不再有效的情况下引发错误(
相关文章:
- 递归求和任务的错误答案
- 为什么我在代码厨师的 CMPRSS 问题中得到 WA(错误答案)?
- 请找出我的代码中的错误,它在提交得到错误答案的同时仍然适用于我的所有测试用例
- 寻找最小楼梯成本的动态规划问题的错误答案
- 为什么可变大小的数组会导致Codechef出现错误答案
- 如何修复此代码对几个测试用例的错误答案?
- 使用幂函数的计算给出了大数字的错误答案
- 快速排序算法,一些特定输入序列的错误答案和分段错误
- 二分法程序的错误答案(C++)
- 无法理解绘图程序中的错误答案
- C++ - 整数除以整数返回错误答案
- 布尔函数的错误答案
- SPOJ FASTFLOW上的错误答案
- 代码的错误答案是在Java Camel案件和C 下划线标识符之间转换的错误答案
- 200万以下所有素数的总和,线程给出错误答案
- 0-1整数背包返回错误答案(动态编程)
- UVa 在线判断 - 3n + 1 - 错误答案
- 提升C++原始算法错误答案
- 二项式系数函数C++错误答案 n>13
- 需要帮助以避免 SPOJ 上的"错误答案"