跨多个函数访问类指针

Accessing class pointers across several functions

本文关键字:指针 访问 函数      更新时间:2023-10-16

我遇到了一个问题,我一直在努力提高代码的效率。我已经创建了一个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()也是如此。同样的事情。

我认为这里的问题是,您混淆了pointer&参考

void Vectors::setV1(Vectors &vector1)中,您将获得vector1作为参考。接下来,您将创建一个全新的对象Vectors *Vector1 = new Vectors();。然后继续填充*Vector1。到目前为止,我没有看到任何奇怪的事情。然而,Vector1 = &vector1;这一部分完全破坏了程序。您现在正在重新分配指针Vector1,其传入地址为vector1

除非您在内存上有vector1所指出的一些值,否则您将不会得到正确的结果。假设你很幸运,正如你没有说的那样,你的程序生成了SIGSEGV:)