我遇到了一个问题,我一直试图让我的代码更有效率。我已经创建了一个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();
}
提前谢谢!
答案 0 :(得分:1)
Vector2 = &vector2;
你倒退了。您已经覆盖了指向刚刚使用指向完全未初始化对象的指针初始化的新对象的指针。当然,随机数据在未初始化的对象中。
你不需要
Vectors *Vector2 = new Vectors();
首先是。只需直接从vector2
初始化std::cin
参数即可。同样适用于其他函数setV1()。同样的事情。
答案 1 :(得分:0)
我认为这里的问题是,你对指针和放大器感到困惑。参考
在void Vectors::setV1(Vectors &vector1)
中,您将获得vector1
作为参考。
接下来,您将创建一个全新的对象Vectors *Vector1 = new Vectors();
。然后你继续填补*Vector1
。直到这一点,我没有看到任何奇怪的东西。但是,这部分Vector1 = &vector1;
完全损害了该计划。您现在重新分配指针Vector1
,其地址为vector1
。
除非你vector1
所指出的内存有一些价值,否则你不会得到正确的结果。事实上,你很幸运,正如你没说的,你的程序生成了SIGSEGV :)