2014-02-19 33 views
2
float App::fresnelReflectTerm(float etaPos, float etaNeg, float cos_theta_i) 
{ 
float theta_i; 
theta_i = acos(cos_theta_i); 
    ... 

這會產生一個「以重載函數錯誤曖昧電話」,並表示,有四個選項:錯誤:不明確調用重載函數

float acos(float fValue) 
double acos(double _X) 
float acos(float _X) 
long double acos(long double _X)  

我懷疑的問題是,第一和第三都採用float arg並返回浮點值。但任何人都可以給我一個關於如何確定(我使用Visual Studio)這四個函數來自哪裏的暗示,以便我可以消除重複,例如?或者只是給我一些關於如何解決這個問題的提示。

+0

你在這個項目中使用了什麼? Math.h和GenericMathTemplateLibrary? – AndyG

+0

我會從theta_i = acos((float)cos_theta_i)開始;只是爲了看看是否會僞造編譯器,如果這讓我無處回落在theta_i =(float)acos((double)cos_theta_i); –

+0

謝謝。現在,我已經發現了蒂姆的想法(也是第一個 - 它不起作用),所以我就跑了。 – John

回答

2

您可以在該功能上按F12。

更新基於從OP評論

,這個問題是由於acos定義從G3D::被帶到英寸使用std::acos而不是acos將消除歧義。

+0

這只是我需要的信息;謝謝! – John

+0

@John所以根源問題是什麼? –

+0

根本問題是簽名'float acos(float)'的兩個函數。事實證明,其中一個是'G3D :: acos',我正在使用的庫中的一個函數;一旦我使用'G3D ::',編譯器就可以區分。我其實*想要*其他*一個,但仍不知道如何得到它,但我可以用我得到的。 – John

1

您可以在VS studio中啓用文件列表編譯器選項,以便在編譯期間知道包含哪些文件,請參閱msdn article

+0

謝謝。我會將它記錄下來供以後使用,當我確定它會出現。 – John

相關問題