2015-12-11 3 views
0

У меня есть класс Vectors, который имеет частный динамический массив. Все, что я хотел сделать, это добавить два объекта Vectors, таких как A = A + B, но программа продолжает сбой.Добавление двух векторов с использованием перегрузки оператора

Это заявление моего класса:

class Vectors 
    { 
    private: 
     int* vector; 
    public: 
     Vectors(int); 
     Vectors(Vectors&); 
     ~Vectors(); 

     Vectors operator+(Vectors&); 

    }; 

Это моя реализация:

#include "Vectors.h" 
#include "iostream" 
using namespace std; 

Vectors::Vectors(int value) 
{ 
    this->vector = new int[3]; 
    for (auto i = 0; i < 3; i++) 
    { 
     vector[i] = 3; 
    } 
} 

Vectors::Vectors(Vectorsy& copy) 
{ 
    this->vector = new int[3]; 
    for (auto i = 0; i < 3; i++) 
    { 
     vector[i] = copy.vector[i]; 
    } 
} 

Vectors::~Vectors() 
{ 
    delete[] vector; 
} 

Vectors Vectors::operator+(Vectors& obj) // There is sth wrong here. 
{ 
    for (auto i = 0; i < 3; i++) 
     this->vector[i] += obj.vector[i]; 

    return *this; 
} 

Это ошибка, я получаю:

enter image description here

+0

Убедитесь включить ошибку ваш компилятор дает вам –

+0

@LucasSaldyt done –

ответ

3

Я считаю, что вам нужно функция operator=. Вы не реализовали его, поэтому компилятор записывает файл по умолчанию, который делает неправильную вещь (из-за того, что класс имеет указатель). Скорее всего, сбой происходит при одновременном удалении одной и той же памяти.

См What is The Rule of Three?

+0

Вы чертовски правы, приветствия Когда я создаю новый объект таким образом Векторы C = Векторы (A + B), все правильно. –

0

Проблема была копия Конструктор (Vectors :: Векторы (Const Векторы & копия) Услышать рабочий код.

#include "iostream" 
using namespace std; 

class Vectors 
    { 
    private: 
     int* vector; 
    public: 
     Vectors(int); 
     Vectors(const Vectors&); 
     ~Vectors(); 

     Vectors operator+(Vectors&); 

    }; 


Vectors::Vectors(int value) 
{ 
    this->vector = new int[3]; 
    for (auto i = 0; i < 3; i++) 
    { 
     vector[i] = 3; 
    } 
} 

Vectors::Vectors(const Vectors& copy) 
{ 
    this->vector = new int[3]; 
    for (auto i = 0; i < 3; i++) 
    { 
     vector[i] = copy.vector[i]; 
    } 
} 

Vectors::~Vectors() 
{ 
    delete[] vector; 
} 

Vectors Vectors::operator+(Vectors& obj) // There is sth wrong here. 
{ 
    for (auto i = 0; i < 3; i++) 
     this->vector[i] += obj.vector[i]; 

    return *this; 
} 

int main() 
{ 
     Vectors A(3), B(3); 
     Vectors C = A+B; 
} 
+0

Попробуйте векторы A (0), B (3), а затем A = B + B; не работает –

+0

becaus e operator = not defined –

+0

, но вы являетесь правильной копией condtructor, была только одна ошибка –

Смежные вопросы