2016-04-16 42 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 :)