繁体   English   中英

跨多个函数访问类指针

[英]Accessing class pointers across several functions

我有一个问题,试图提高我的代码效率,我已经坚持了一段时间。 我已经创建了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();
}

先感谢您!

Vector2 = &vector2;

您这样做是倒退的。 您已经使用在此处传递的指向完全未初始化对象的指针覆盖了刚刚初始化的新对象的指针。 当然,随机数据位于未初始化的对象中。

您不需要

Vectors *Vector2 = new Vectors();

首先。 只需直接从std::cin初始化vector2参数即可。 同样,其他函数setV1()也是如此。 一样。

我认为这里的问题是,您对指针和引用感到困惑。

void Vectors::setV1(Vectors &vector1) ,您将获得vector1作为参考。 接下来,您将创建一个全新的对象Vectors *Vector1 = new Vectors(); 然后,您将继续填充*Vector1 到此为止,我什么都看不到。 但是,这部分Vector1 = &vector1; 完全损坏程序。 现在,您使用传入地址vector1 重新分配指针Vector1

除非您在vector1指出的内存上具有某些值,否则您将不会获得正确的结果。 实际上,您很幸运,正如您未说的那样,您的程序生成了SIGSEGV :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM