0

私はこの C++ エラーを 2 日間にわたって何時間もデバッグしようとしてきましたが、それを理解することも、検索で答えを見つけることもできません。これを修正する方法を教えてくれる人はいますか?

エラー:

111:44: error: arithmetic on a pointer to the function type 'double (double, int)'
            return (principal * (pow((effective_rate + 1), years_elapsed)));
                                      ~~~~~~~~~~~~~~ ^

関連コード:

#include <iostream>
#include <iomanip>
#include <string>
#include <cmath>

using namespace std;

using std::ios; 
using std::cin;
using std::cout;
using std::endl;

double effective_rate(double annual_rate, int num_times_compounded=0);
double balance(double annual_rate, double principal, double &years_elapsed, int num_times_compounded=0);

double annual_rate;
int num_times_compounded;
double principal;
double years_elapsed;

int main() {
 //code to get inputs and do printouts
}

double effective_rate(double annual_rate, int num_times_compounded) 
{
    if (num_times_compounded > 0) {
        return (pow((1 + (annual_rate/num_times_compounded)), num_times_compounded) - 1);
    }   else {
        return (pow(e, annual_rate) - 1);
    }
}

double balance(double annual_rate, double principal, double years_elapsed, int num_times_compounded)
{
    if (num_times_compounded > 0) {
[**this is line 111:**] return (principal * (pow((effective_rate + 1), years_elapsed)));
    } else {
        return (principal * (pow( (effective_rate + 1), num_times_compounded) ) );
    }
}

2 番目の関数は最初のeffective_rate関数を認識していないようで、参照渡しに変更しても機能しないようです。シンプルで明白なものが欠けているに違いありませんか?

4

1 に答える 1

1

パラメータを使用して関数を呼び出す必要があります。括弧とその引数 (ある場合) を使用せずに関数を呼び出すことはできません。

#include <iostream>
#include <iomanip>
#include <string>
#include <cmath>

double effective_rate(double annual_rate, int num_times_compounded=0);
double balance(double annual_rate, double principal, double years_elapsed, int num_times_compounded=0);

double annual_rate;
int num_times_compounded;
double principal;
double years_elapsed;

int main() {
 //code to get inputs and do printouts
}

double effective_rate(double annual_rate, int num_times_compounded) 
{
    if (num_times_compounded > 0) {
        return (pow((1 + (annual_rate/num_times_compounded)), num_times_compounded) - 1);
    }   else {
        return (pow(e, annual_rate) - 1);
    }
}

double balance(double annual_rate, double principal, double years_elapsed, int num_times_compounded)
{
    if (num_times_compounded > 0) {
        return (principal * (pow((effective_rate(annual_rate, num_times_compounded) + 1), years_elapsed)));
    } else {
        return (principal * (pow((effective_rate(annual_rate, num_times_compounded) + 1), num_times_compounded) ) );
    }
}

eこれは機能しますが、最初に定義する必要があります。

また、グローバルはできるだけ使用しないでください。あなたの場合、競合する名前があります。たとえば、annual_rateandnum_times_compoundedをグローバル変数として定義し、それらまったく同じ名前を関数の引数として使用しています。これらの場合、グローバル変数は使用されません。

using編集:ああ、最後に、ディレクティブの使用も避ける必要があります。入力std::はそれほど労力を必要とせず、コードをばかげたエラーからより安全にします。

編集:OPの最後の質問に答えるには、三項条件演算子を使用できますが、読みやすさを犠牲にします。3 番目の変数を使用して 3 項条件演算の結果を格納し、その変数をピリオドとして使用することで、それが実行されていることがわかります。

double balance(double annual_rate, double principal, double years_elapsed, int num_times_compounded)
{
    return (principal * (pow((effective_rate(annual_rate, num_times_compounded) + 1), num_times_compounded > 0 ? years_elapsed : num_times_compounded)));
}

または変数を使用して..おそらくよりきれいです。

double balance(double annual_rate, double principal, double years_elapsed, int num_times_compounded)
{
    double period = num_times_compounded > 0 ? years_elapsed : num_times_compounded;
    return (principal * (pow((effective_rate(annual_rate, num_times_compounded) + 1), period )));
}
于 2012-11-04T01:47:30.460 に答える