C ++ Перегрузка + оператор для двух объектов с разными типами данных - PullRequest
0 голосов
/ 28 апреля 2018

Я должен использовать шаблон, потому что требуется, чтобы x, y, z могли быть любых типов (int, float, double, long и т. Д.).

#include <conio.h>
#include <iostream>
using namespace std;

template <class T>
class TVector //this class is for creating 3d vectors
{
    T x, y, z;
    public:
    TVector() //default value for x, y, z
    {
        x = 0; 
        y = 0; 
        z = 0;
    }
    TVector(T a, T b, T c)
    {
        x = a; y = b; z = c;
    }

    void output()
    {
        cout << x << endl << y << endl << z;
    }

    //overloading operator + to calculate the sum of 2 vectors (2 objects)
    TVector operator + (TVector vec) 
    {
        TVector vec1;
        vec1.x = this->x + vec.x;
        vec1.y = this->y + vec.y;
        vec1.z = this->z + vec.z;
        return vec1;
    }
};

int main()
{
    TVector<int> v1(5, 1, 33); 
    TVector<float> v2(6.11, 6.1, 5.1);
    TVector<float> v3;    

    v3 = v1 + v2;
    v3.output();

    system("pause");
    return 0;
}

Если бы объект v1 был плавающим, то вышеприведенный код работал бы отлично. Однако требуется, чтобы вектор v1 имел тип данных int . Как мне решить это?

Я уже пытался использовать шаблон для перегрузки оператора +, мой код выглядит так:

template <typename U>
TVector operator+(TVector<U> vec)
{
    TVector vec1;
    vec1.x = this->x + vec.x;
    vec1.y = this->y + vec.y;
    vec1.z = this->z + vec.z;
    return vec1;
}; 

^ По-прежнему не работает: enter image description here

1 Ответ

0 голосов
/ 28 апреля 2018

Ваша проблема не имеет (или очень мало) связана с перегрузкой operator+. Ошибка компилятора говорит само за себя: v1 + v2 создает вектор типа TVector<int> (поскольку именно так вы определили operator+), и вы пытаетесь присвоить его v3 типа TVector<float>. Но вы не определили оператор присваивания для TVector s различных типов (и это именно то, что компилятор сообщает вам в сообщении об ошибке)!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...