【问题标题】:Passing a pointer to a function as an argument to a function将指向函数的指针作为参数传递给函数
【发布时间】:2019-08-17 10:55:41
【问题描述】:

只是想知道是否有人可以就我在哪里出错给我一些建议。如果我按原样运行我的程序可以正常工作,但是一旦我将注释行与它下面的行交换,我就会得到错误。我的目标是能够使用注释行,因为我想创建一个程序,让我将指向函数的指针作为参数传递给另一个函数,但到目前为止我没有运气。

#include <iostream>
using namespace std;

double arith_op(double left, double right, double (*f)(double, double));
double addition(double left, double right);
double subtraction(double left, double right);
double multiplication(double left, double right);

int main()
{
  double left, right;
  int choice;
  double (*f[3])(double, double) = { addition, subtraction, multiplication };
  
  cout << "Enter 1 for addition, 2 for subtraction, 3 for multiplication "
       << "(-1 to end): " << endl;
  cin >> choice;

  while (choice != -1) {

    cout << "Enter a floating-point number: " << endl;
    cin >> left;

    cout << "Enter another floating-point number: " << endl;
    cin >> right;

    // double* result = arith_op(left, right, f[choice - 1](left, right));
     double result = f[choice - 1](left, right);

    if (choice == 1) {
      cout << left << " + " << right << " = " << result;
    }
    else if (choice == 2) {
      cout << left << " - " << right << " = " << result;    
    }
    else {
      cout << left << " * " << right << " = " << result;    
    }
    cout << endl;

    cout << "Enter 1 for addition, 2 for subtraction, 3 for multiplication "
     << "(-1 to end): " << endl;
    cin >> choice;
  }
}

double arith_op(double left, double right, double (*f)(double, double))
{
  return (*f)(left, right);
}

double addition(double left, double right)
{
  return left + right;
}
double subtraction(double left, double right)
{
  return left - right;
}

double multiplication(double left, double right)
{
  return left * right;
}

我应该补充一点,我的最终目标是将函数 arith_op 和其他函数打包到一个单独的文件中,然后通过将它们的原型包含在“extern”中来使用它们。这可能是解决问题的一种奇怪的方法——它是为了分配,而且它们总是很奇怪。

谢谢你:)

韦德

【问题讨论】:

  • 您遇到什么类型的错误?除此之外,您的程序是 C 风格,但不是 C++ 风格:您将使用类和继承...
  • 我刚刚完成了一个 C 课程,所以你是对的。我正在做的新课程的结构是,我们首先回顾 C,然后转向 C++ 风格。因此,我们不允许使用任何 OOP 范式来解决这个问题。

标签: c++ parameter-passing function-pointers extern-c


【解决方案1】:

您的问题出在此处的第三个参数中

arith_op(left, right, f[choice - 1](left, right));

f[i](left, right) 正在调用函数以提供双精度,而不是将函数指针传递给 arith_op。只需删除参数列表

arith_op(left, right, f[choice - 1]);

【讨论】:

  • 另外,在该行声明 double* result 应该是 double result
  • 正确!谢谢先生。
【解决方案2】:

头晕我现在觉得自己很蠢。有用。太棒了,谢谢!

遗憾的是,我的程序实际上仍然没有给我满分,但那是因为我们必须使用自动在线评分系统提交它。因此,如果您的格式不完全正确,即使程序实际上运行良好,您也会失去分数。

发布脚本 - 根据分配说明,我还成功地将我的函数移动到了一个单独的文件中。它告诉我我没有正确命名我的函数,但是程序可以工作,这很重要。

【讨论】:

    猜你喜欢
    • 2010-11-19
    • 2015-03-17
    • 2021-07-18
    • 2013-11-18
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    相关资源
    最近更新 更多