Пишу лабораторную по программированию, возникает ошибка, связанная, как я понял, с утерей памяти (программа - написание функций для сложения, вычитания, умножения, деления и скалярного произведения для векторов в n-мерном пространстве. (Пишу в VS на C++(ООП))
Сам код
//h файл
#pragma once
#include <iostream>
class Vector {
private:
double* coord;
int size;
public:
Vector(const Vector& vec);
Vector(int n);
Vector operator+(const Vector& vec);
Vector operator-(const Vector& vec);
Vector operator*(const Vector& other);
Vector operator/(const Vector& other);
double scalar(Vector x, Vector y);
double length() const;
void set(int pos, double value);
friend std::ostream& operator<<(std::ostream& os, const Vector& vec);
};
//cpp файл
#include "Vector.h"
#include <iostream>
Vector::Vector(const Vector& vec) {
coord = vec.coord;
size = vec.size;
}
Vector::Vector(int n) {
coord = new double[size];
for (int i = 0; i < size; i++) {
coord[i] = 0;
}
size = n;
}
void Vector::set(int pos, double value)
{
coord[pos] = value;
}
Vector Vector::operator+(const Vector& vec) {
for (int i = 0; i < size; i++) {
coord[i] = coord[i] + vec.coord[i];
}
return *this;
}
Vector Vector::operator-(const Vector& vec) {
for (int i = 0; i < size; i++) {
coord[i] = coord[i] - vec.coord[i];
}
return *this;
}
Vector Vector::operator*(const Vector& scalar) {
for (int i = 0; i < size; i++) {
coord[i] = coord[i] * scalar.coord[i];
}
return *this;
}
Vector Vector::operator/(const Vector& scalar) {
for (int i = 0; i < size; i++) {
coord[i] = coord[i] / scalar.coord[i];
}
return *this;
}
double Vector::length() const {
double result = 0;
for (int i = 0; i < size; i++) {
result += pow(coord[i], 2);
}
return sqrt(result);
}
//
double Vector::scalar(Vector x, Vector y) {
double res = 0;
for (int i = 0; i < size; i++) {
res += x.coord[i] * y.coord[i];
}
return res;
}
std::ostream& operator<<(std::ostream& os, const Vector& vec) {
os << "(";
for (int i = 0; i < vec.size; i++) {
os << vec.coord[i];
if (i != vec.size) {
os << ", ";
}
}
os << ")";
return os;
}
//main.cpp файл
#include <iostream>
#include "Vector.h"
using namespace std;
int main() {
Vector vector1(3);
Vector vector2(3);
vector1.set(0, 1);
vector1.set(1, 2);
vector1.set(2, 3);
vector2.set(0, 4);
vector2.set(1, 5);
vector2.set(2, 6);
cout << "Vector1" << vector1 << endl;
cout << "Vector2" << vector2 << endl;
Vector vector3 = vector1 + vector2;
cout << "sum" << vector3 << std::endl;
Vector vector4 = vector1 - vector2;
cout << "difference" << vector4 << endl;
Vector vector5 = vector1 * vector2;
cout << "multyplation" << vector5 << endl;
Vector vector6 = vector1 / vector2;
cout << "division" << vector6 << endl;
double length1 = vector1.length();
double length2 = vector2.length();
cout << "Length of vector1: " << length1 << endl;
cout << "Length of vector2: " << length2 << endl;
double scalar = vector1.scalar(vector1, vector2);
cout << "Dot product of vectors = " << scalar << endl;
}
Ошибка выскакивает в функции:
std::ostream& operator<<(std::ostream& os, const Vector& vec) {
os << "(";
for (int i = 0; i < vec.size; i++) {
os << vec.coord[i];
if (i != vec.size) { //компилятор ругается на эту строчку
os << ", ";
}
}
os << ")";
return os;
}
Подскажите, пожалуйста, в чём ошибка, и связана ли она с конструкторами класса, или дело в самой функции?