2012-01-09 9 views
1

私は、次のヘッダーの機能があります。以下の定義私のコンパイラは、オーバーロードされた関数と思われるものと混同していますか?

float computeDistance3(Vector3f& vec_a, Vector3f& vec_b) { 
    float x = vec_a.x - vec_b.x; 
    float y = vec_a.y - vec_b.y; 
    float z = vec_a.z - vec_b.z; 

    return sqrt((x * x) + (y * y) + (z * z)); 
} 

float computeDotProduct3(Vector3f& vec_a, Vector3f vec_b) { 
    return (vec_a.x * vec_b.x) 
     + (vec_a.y * vec_b.y) 
     + (vec_a.z * vec_b.z); 
} 

float computeGeoDotProd3(Vector3f& vecta, Vector3f& vectb) { 
    float amag, bmag, dotProd; 

    amag = vecta.computeMagnitude(); 
    bmag = vectb.computeMagnitude(); 

    dotProd = computeDotProduct3(vecta, vectb); 

    bool notZero = (amag != 0.0f && bmag != 0.0f) && dotProd != 0.0f; 

    if (notZero) { 
     return cosf(dotProd/(amag * bmag)); 
    } else { 
     return -1.0f; 
    } 

} 

float computeDistance3(Vector3f& vec_a, Vector3f& vec_b); 

float computeDotProduct3(Vector3f& vecta, Vector3f& vectb); 

float computeGeoDotProd3(Vector3f& vecta, Vector3f& vectb); 

私は彼らの署名が同じであることを知っています。これはコンパイラを混乱させますか?コンパイラをunconfusingを解決する何

vector3f.cpp: In function ‘float computeGeoDotProd(Vector3f&, Vector3f&)’:                         
vector3f.cpp:139:43: error: call of overloaded ‘computeDotProduct3(Vector3f&, Vector3f&)’ is ambiguous                  
vector3f.cpp:139:43: note: candidates are:                                 
vector3f.h:31:7: note: float computeDotProduct3(Vector3f&, Vector3f&)                          
vector3f.cpp:127:7: note: float computeDotProduct3(Vector3f&, Vector3f) 

質問

を:私はコードをコンパイルするとき、私はこれを取得するので、私は、そう推測していますか?

+1

あなたの関数は引数を変更しないので、const参照または値のどちらかでそれらを取る必要があります。非const参照ではありません。 –

+0

私はそれを念頭に置いておきます... – zeboidlund

答えて

5

あなたが定義の中で&を逃している:

float computeDotProduct3(Vector3f& vec_a, Vector3f vec_b) { 

は次のようになります。

float computeDotProduct3(Vector3f& vec_a, Vector3f& vec_b) { 

ですから、参照のみが異なる二つの異なる(オーバーロード)関数プロトタイプで終わる& - あいまいです。

関連する問題