Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我得到“C2678 binary'+”:在本例中找不到接受类型为“const…”的左手操作数的运算符?_C++_Math - Fatal编程技术网

C++ 为什么我得到“C2678 binary'+”:在本例中找不到接受类型为“const…”的左手操作数的运算符?

C++ 为什么我得到“C2678 binary'+”:在本例中找不到接受类型为“const…”的左手操作数的运算符?,c++,math,C++,Math,作为项目的一部分,我正在构建一个数学库,这样我就可以更好地通过实现而不是使用现有的库(如glm)来学习。在这个库中,我有一个Vector3类,目前正在抛出一个编译器错误,尽管我不明白为什么 uint vertIndex = i * 2; const Vertex& vSource = data.vertices[i]; Vertex& v1 = result.vertices[vertIndex]; Vertex& v2 = result.vertices[vertInd

作为项目的一部分,我正在构建一个数学库,这样我就可以更好地通过实现而不是使用现有的库(如glm)来学习。在这个库中,我有一个Vector3类,目前正在抛出一个编译器错误,尽管我不明白为什么

uint vertIndex = i * 2;
const Vertex& vSource = data.vertices[i];
Vertex& v1 = result.vertices[vertIndex];
Vertex& v2 = result.vertices[vertIndex + 1];
v1.position = vSource.position;
v2.position = vSource.position + vSource.normal;
v1.colour = v2.colour = Vector3(1.0f, 1.0f, 1.0f);
C2678表示从底部开始的第二行

下面是“+”运算符重载:

减容

Vector3 operator +(const Vector3& rhs);
实现.cpp

Vector3 Vector3::operator+(const Vector3 & rhs)
{
    return Add(rhs);
}
为了完整性->添加函数

return Vector3(x + r.x, y + r.y, z + r.z);
这就解决了错误

inline Vector3 operator +(const Vector3 lhs, const Vector3& rhs){
    //implementation here
}
所以我的问题是……我是否应该像以前那样重载所有运算符。为什么以前的方法没有隐式转换?

应该重载+运算符:

宣言.h 实现.cpp 解释 当将const声明附加到方法的原型时,它指示调用方法的对象的属性不会因方法的执行而改变

注意:Add方法也应该标记为const。

这是因为vSource是对常量对象的引用,这意味着对它调用的所有成员函数都需要标记为const。
Vector3 operator +(const Vector3& rhs) const;
Vector3 Vector3::operator+(const Vector3 & rhs) const
{
    return Add(rhs);
}