2016-04-16 40 views
0

我遇到了一個問題,我一直試圖讓代碼更加高效。我創建了一個Vector類,需要用它做一些基本的計算。使用矢量庫是不可能的,我需要創建自己的。 我目前的問題是在數學的最後階段。我可以輸入第一個和第二個矢量的值,但將它們加在一起後,我會得到完全隨機的數字。我發佈我的頭文件和我的CPP文件 - 任何幫助將不勝感激!跨幾個函數訪問類指針

Vectors.h

#include <math.h> 
#include <iostream> 

class Vectors 
{ 
public: 
    Vectors(void); 
    ~Vectors(void); 
    Vectors(double a1, double b1, double c1, double d1) 
    { 
     a = a1; 
     b = b1; 
     c = c1; 
     d = d1; 
    } 
    void VectorAdd(Vectors vector1, Vectors vector2); 
    void VectorSub(); 
    void VectorMulti(); 
    void VectorDiv(); 
    void VectorDP(); 
    void VectorCP(); 
    void setV1(Vectors &vector1); 
    void setV2(Vectors &vector2); 
private: 
    double a; 
    double b; 
    double c; 
    double d; 
    double cp; 
}; 

cpp文件

void Vectors::setV1(Vectors &vector1) 
{ 
    Vectors *Vector1 = new Vectors(); 
    std::cout << "Enter the values of the first vector please.\n"; 
    std::cout << "a1: "; 
    std::cin >> Vector1 -> a; 
    std::cout << "b1: "; 
    std::cin >> Vector1 -> b; 
    std::cout << "c1: "; 
    std::cin >> Vector1 -> c; 
    std::cout << "d1: "; 
    std::cin >> Vector1 -> d; 
    Vector1 = &vector1; 
    std::cin.get(); 
    std::cin.get(); 
} 

void Vectors::setV2(Vectors &vector2) 
{ 
    Vectors *Vector2 = new Vectors(); 
    std::cout << "Enter the values of the first vector please.\n"; 
    std::cout << "a1: "; 
    std::cin >> Vector2 -> a; 
    std::cout << "b1: "; 
    std::cin >> Vector2 -> b; 
    std::cout << "c1: "; 
    std::cin >> Vector2 -> c; 
    std::cout << "d1: "; 
    std::cin >> Vector2 -> d; 
    Vector2 = &vector2; 
    std::cin.get(); 
    std::cin.get(); 
} 

void Vectors::VectorAdd(Vectors vector1, Vectors vector2) 
{ 

    setV1(vector1); 
    setV2(vector2); 

    Vectors *Vector3 = new Vectors(); 
    std::cout << "Here is the combination of the two vectors.\n"; 
    Vector3 -> a = vector1.a + vector2.a; 
    std::cout << "a3: " << Vector3 -> a; 
    Vector3 -> b = vector1.b + vector2.b; 
    std::cout << "\nb3: " << Vector3 -> b; 
    Vector3 -> c = vector1.c + vector2.c; 
    std::cout << "\nc3: " << Vector3 -> c; 
    Vector3 -> d = vector1.d + vector2.d; 
    std::cout << "\nd3: " << Vector3 -> d; 
    std::cin.get(); 
    std::cin.get(); 
} 

預先感謝您!

回答

1
Vector2 = &vector2; 

你做到了這一點。你已經用指向一個完全未初始化的對象的指針覆蓋了你剛剛初始化的一個新對象的指針,這是你在這裏傳入的。當然,隨機數據在未初始化的對象中。

你不需要

Vectors *Vector2 = new Vectors(); 
擺在首位

。只需從std::cin直接初始化vector2參數即可。同樣,其他函數setV1()也是如此。一樣。

+0

謝謝!我一直在理解所有的指針問題,真的需要再看一遍。 – Turkeydipking

0

我覺得這裏的問題是,你用指針&引用混淆。

void Vectors::setV1(Vectors &vector1)中,您得到vector1作爲參考。 接下來,您正在創建一個全新的對象Vectors *Vector1 = new Vectors();。然後你繼續填寫*Vector1。直到這一點,我沒有看到任何奇怪的東西。但是,這部分Vector1 = &vector1;完全損害了該程序。您現在重新指定指針Vector1與輸入地址vector1

除非您對vector1指向的內存有一些價值,否則您將不會得到正確的結果。事實上,你是幸運的,因爲你沒有說,你的程序生成SIGSEGV :)