2015-12-11 50 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完成 –

回答

3

我相信你需要一個operator=函數。你還沒有實現它,所以編譯器寫入一個默認的錯誤的東西(由於類有一個指針)。在刪除同一內存兩次時,最有可能發生崩潰。

What is The Rule of Three?

+0

你是該死的,歡呼聲。當我用這種方式創建新對象時,向量C =向量(A + B);一切都正確 –

0

問題是拷貝構造函數(載體::向量(矢量常量副本&) 聽見工作代碼。

#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

是導致operator =未定義 –

+0

但你是正確的copy contrutructor只有一個bug –