2012-11-04 74 views
1

我一直試圖在2天內調試這個C++錯誤數小時,無法找出答案或在搜索中找到答案。任何人都可以幫助說明我如何解決這個問題嗎?在另一個函數中使用函數作爲參數的錯誤

錯誤:

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))); 
    } 
} 

看來,第二個功能沒有看到第一effective_rate功能,改變按引用傳遞似乎沒有任何工作。我必須錯過簡單而明顯的東西?

+4

「effective_rate + 1」是什麼意思(在你的代碼中)?畢竟,'effective_rate'是_function_,而不是數字。 – jogojapan

回答

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_ratenum_times_compounded定義爲全局變量,使用那些非常相同的名稱作爲函數的參數。在這些情況下,全局變量不會被使用。

編輯:哦,最後,你也應該避免使用using指令。鍵入std::不需要太多的努力,並使您的代碼更安全的愚蠢的錯誤。

編輯:要回答OP的最後一個問題,您可以使用三元條件運算符,但您犧牲可讀性。唯一的另一個我可以看到它通過使用第三個變量來存儲三元條件操作的結果,然後使用該變量作爲週期。

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))); 
} 
+1

或簡單地使用'exp(annual_rate)'代替... – MartinStettner

+0

有效率不僅僅是e^n。他的功能其實是正確的。 – ApplePie

+0

@ AlexandreP.Levasseur +1,但我認爲Martin的觀點是你可以使用'std :: exp(annual_rate)'而不是'std :: pow(e,annual_rate)'(而不是'effective_rate()') 。那麼你不必定義'e'。 – jogojapan

相關問題