Извините, что стал миллионером, задавшим этот вопрос!
Я пытаюсь собрать несколько элементарных векторных классов, используя наследование. Извините, что выгрузил все в .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
Я немного новичок в наследовании, что может быть до боли очевидным. Я попытался написать новый operator+
в Vector3.h, который определяет указатель на Vector
, присваивает его this
, затем специально вызывает Vector::operator+
на rhs Vector3
, но это не обрезает его ( хе). Подобный вопрос подразумевал, что не было никакого способа построить Vector3
из Vector
, поэтому я попытался добавить это как конструктор, но это тоже не делает этого, а также немного ошибочно. Я также попытался вручную добавить оператор присваивания для Vector
, с похожими результатами.
Где я что-то пропустил?