gpt4 book ai didi

c++ - 我的编译器是否混淆了它认为的重载函数?

转载 作者:行者123 更新时间:2023-11-30 01:27:32 25 4
gpt4 key购买 nike

我有以下头函数:

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)

问题

消除编译器混淆的解决方案是什么?

最佳答案

您在定义中缺少一个 &:

float computeDotProduct3(Vector3f& vec_a, Vector3f vec_b) {

应该是:

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

因此您最终得到两个不同的(重载的)函数原型(prototype),它们仅在引用 & 上有所不同 - 因此不明确。

关于c++ - 我的编译器是否混淆了它认为的重载函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8783019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com