I created my own vector template class and overloaded multiple operators. But if i run my code i get acces violation at the templates [] operator. It seems like the + operation is success but it returns something wrong, as in the Vector3 constructor with the template vector as argument it cant access the elements. What am i doing wrong?
int main(int argc, char* args[])
{
Vector3 vec(1, 2, 3);
Vector3 vec2(3, 2, 1);
Vector3 vec3 = vec + vec2;
std::cout << vec3 << std::endl;
}
Vector.h
template <typename T, size_t N>
class Vector {
protected:
T* elems;
public:
Vector() {
elems = new T[N];
}
Vector(Vector<T, N> const& r) {
elems = new T[N];
for (int i = 0; i < N; i++) {
elems[i] = r[i];
}
}
T operator[](size_t i) const { return elems[i]; }
T& operator[](size_t i) { return elems[i]; }
Vector<T,N>& operator+(Vector<T,N> const& other) {
Vector<T,N> res;
for (int i = 0; i < N; i++) {
res.elems[i] = elems[i] + other.elems[i];
}
return res;
}
friend std::ostream& operator<<(std::ostream& os, const Vector& vec) {
os << "(";
for (int i = 0; i < N; i++) {
os << vec[i];
if (i != N - 1) {
os << ",";
}
}
os << ")";
return os;
}
};
Vector3.h
class Vector3 : public Vector<GLfloat, 3>{
public:
Vector3() {
elems[0] = 0;
elems[1] = 0;
elems[2] = 0;
}
Vector3(GLfloat x, GLfloat y, GLfloat z) {
elems[0] = x;
elems[1] = y;
elems[2] = z;
}
Vector3(GLfloat x, GLfloat y) {
elems[0] = x;
elems[1] = y;
elems[2] = 0;
}
Vector3(const Vector<GLfloat, 3> &vec) {
elems[0] = vec[0];
elems[1] = vec[1];
elems[2] = vec[2];
}}