У меня есть проблема, на которой я застрял некоторое время, пытаясь сделать свой код более эффективным. Я создал класс 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
Turkeydipking 16 Апр 2016 в 18:12

2 ответа

Лучший ответ
Vector2 = &vector2;

Вы сделали это наоборот. Вы перезаписали указатель на новый объект, который вы только что инициализировали, указателем на полностью неинициализированный объект, который вы передали здесь. Разумеется, случайные данные находятся в неинициализированном объекте.

Вам не нужен

Vectors *Vector2 = new Vectors();

У меня есть проблема, на которой я застрял некоторое время, пытаясь сделать свой код более эффективным. Я создал класс Vector, и мне нужно провести с ним базовые вычисления. Об использовании векторной библиотеки не может быть и речи, мне нужно создать свою. Проблема, с которой я столкнулся в настоящее время, находится на заключительном этапе математики. Я могу ввести значения для первого и второго вектора, но, сложив их вместе, я получаю совершенно случайные числа. Я отправляю свой файл заголовка и файл cpp - любая помощь будет оценена по достоинству !!

1
Sam Varshavchik 16 Апр 2016 в 15:17

Если у вас нет значения в памяти, как указано {{X0}}, у вас не будет правильных результатов. На самом деле вам повезло, как вы не сказали, ваша программа сгенерировала SIGSEGV :)

В void Vectors::setV1(Vectors &vector1) вы получаете vector1 как ссылку. Затем вы создаете новый объект Vectors *Vector1 = new Vectors();. И тогда вы продолжаете заполнять *Vector1. До сих пор ничего странного не вижу. Однако эта часть Vector1 = &vector1; полностью вредит программе. Теперь вы переназначаете указатель Vector1 на входящий адрес vector1.

На первом месте. Просто инициализируйте параметр vector1 напрямую из {{X1}}. То же самое и для другой функции, setV1 (). То же самое.

0
kspviswa 16 Апр 2016 в 15:20