Мой компилятор перепутан с тем, что он считает перегруженными функциями? - PullRequest
1 голос
/ 09 января 2012

У меня есть следующие функции заголовка:

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

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

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

Со следующими определениями

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

}

Я знаю, что их подписитот же самый.Это смущает компилятор?Я предполагаю, что потому, что когда я компилирую код, я получаю это:

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 Ответ

5 голосов
/ 09 января 2012

Вам не хватает & в определении:

float computeDotProduct3(Vector3f& vec_a, Vector3f vec_b) {

должно быть:

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

Таким образом, вы получите два разных (перегруженных) прототипа функций, которые отличаютсятолько по ссылке & - следовательно, неоднозначно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...