gpt4 book ai didi

c++ - 没有合适的具有重载构造函数和继承的用户定义转换

转载 作者:行者123 更新时间:2023-11-30 01:34:10 24 4
gpt4 key购买 nike

很抱歉成为第 1,000,000 位提问者!

我正在尝试使用继承将一些基本的 vector 类放在一起。请原谅将所有内容都放在 .h 中,我的实现将它们分开了,但为了简洁起见,我将它们压缩在这里。

vector .h

class Vector{
public:
Vector operator+(const Vector& rhs) {
assert(dimensions == rhs.getDimensions());
Vector result(dimensions);
for (char i = 0; i < dimensions; i++) {
result[i] = values[i] + rhs[i];
}
return result;
}
double& operator[](int index) {
//Asserts 0 <= index < dimensions and returns values[index]
}
protected:
Vector(char dimensions) :
dimensions(dimensions), values(dimensions) {}
std::vector<double> values;
private:
char dimensions;
};

Vector3.h

class Vector3 : public Vector {
public:
Vector3(double X, double Y, double Z) :
Vector(3),
x(X), y(Y), z(Z)
{values[0] = x; values[1] = y; values[2] = z;}
double& x, y, z;
private:
Vector3(const Vector& vec) :
Vector3(vec[0], vec[1], vec[2]) {}

};

我很确定这就是问题所涉及的一切......

这里是错误的地方:

Vector3 myVector3A(1,2,3); //OK
Vector3 myVector3B(4,5,6); //OK
Vector3 myVector3C = myVector3A + myVector3B; //Error: No suitable user-defined conversion for Vector to Vector3

我对继承有些陌生,这可能是显而易见的。我尝试在 Vector3.h 中编写一个新的 operator+,它定义了一个指向 Vector 的指针,将其分配给 this,然后专门调用 Vector::operator+rhs Vector3 上,但这并不能解决问题(呵呵)。一个类似的问题暗示没有办法从 Vector 构造一个 Vector3,所以我尝试将它添加为构造函数,但这也没有做到,以及感觉有点不对劲。我还尝试为 Vector 手动添加复制赋值运算符,结果相似。

我哪里遗漏了什么?

最佳答案

你根本不应该在这里使用继承。继承根本不适用于二元运算符。

如果您想要一个通用 Vector 来抽象维数,正确的方法是对其进行参数化,创建一个类模板

template <size_t D>
class Vector {
// your data and methods here,
// nothing is virtual
};

using Vector3 = Vector<3>;

关于c++ - 没有合适的具有重载构造函数和继承的用户定义转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56830116/

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