I'm trying to make a fractionType class with functional arithmetic with objects of the same class, I'm also using a template so that the fractionType object can be constructed with an int, float, or double. I've been looking all over for solutions to one problem after another, so I'm needing help resolving the above error in this code:
main.cpp:
#include <iostream>
#include "fractionType.h"
using namespace std;
int main()
{
fractionType<int> x(4, 2);
fractionType<double> y(5.2, 6.8);
fractionType<float> z(1.0, 1.0);
z = x + y;
return 0;
}
fractionType.h:
#ifndef FRACTIONTYPE_H
#define FRACTIONTYPE_H
using namespace std;
template <class T>
class fractionType;
template <class T>
class fractionType
{
public:
explicit fractionType();
explicit fractionType<T>(T num, T den);
T numerator;
T denominator;
};
template <class T>
fractionType<T>::fractionType()
{
}
template <class T>
fractionType<T>::fractionType(T num, T den)
{
numerator = num;
denominator = den;
}
template <typename U, typename V>
fractionType<int> operator + (const fractionType<U>& fraction1, const fractionType<V>& fraction2)
{
fractionType<int> tempFraction(1,1);
tempFraction.numerator = (fraction1.numerator * fraction2.denominator + fraction1.denominator * fraction2.numerator);
tempFraction.denominator = (fraction1.denominator * fraction2.denominator);
return tempFraction;
}
#endif
The error:
main.cpp: In function ‘int main()’:
main.cpp:10:13: error: no match for ‘operator=’ (operand types are ‘fractionType’ and ‘fractionType’)
10 | z = x + y;
| ^
In file included from main.cpp:2:
fractionType.h:10:7: note: candidate: ‘fractionType& fractionType::operator=(const fractionType&)’
10 | class fractionType
| ^~~~~~~~~~~~
fractionType.h:10:7: note: no known conversion for argument 1 from ‘fractionType’ to ‘const fractionType&’
fractionType.h:10:7: note: candidate: ‘fractionType& fractionType::operator=(fractionType&&)’
fractionType.h:10:7: note: no known conversion for argument 1 from ‘fractionType’ to ‘fractionType&&’
Any advice?