2014-02-07 60 views
-3

我在我的程序來計算使用的距離公式兩點之間的距離,創造了一個快速的方法,下面的代碼:錯誤:表達式不能用作函數?

#include <iostream> 
#include <cmath> 

using namespace std; 

int distanceFormula(int x1, int y1, int x2, int y2) { 
    double d = sqrt((x1-x2)^2(y1-y2)^2); 
    return d; 
} 

它給了我在哪裏,我宣佈了「d」變量行編譯器錯誤說「錯誤:表達式不能用作函數」。這是什麼意思?我做錯了什麼?

回答

6

要小心,(x1-x2)^2在這裏不會做2的指數。 見http://www.cplusplus.com/reference/cmath/pow/

第二,你可能在你的表達忘了+

int distanceFormula(int x1, int y1, int x2, int y2) { 
    double d = sqrt(pow(x1-x2, 2) + pow(y1-y2, 2)); 
    return d; 
} 
+1

啊!謝謝!在數學課上我已經完成了這個任務,並且完全放棄了關於權力函數的想法,非常感謝你 – LoreleiRS

+1

如果你有興趣,'^'(XOR)實際上是C/C++中的一個操作符。請參閱http://www.cplusplus.com/doc/boolean/ –

+0

爲什麼不將函數的返回類型更改爲'double'? – ForceBru

1

編譯器錯誤是因爲2(y1-y2)無效語法。

在這種情況下,2(或可能是(x1-x2)^2)是「表達式」,(y1-y2)被視爲函數調用參數列表;這種語法生產是根本不允許的。

比較下面的形式,其中一個二元運算(*)被引入,這又使得解析器治療後續(y1-y2)作爲表達(通過分組括號界),而不是函數調用。雖然它不會做所期望的,因爲^不是冪指數,所得到的等式是無稽之談,它應該解析和編譯。

sqrt((x1-x2)^2*(y1-y2)^2) 
相關問題