Receiving errors for default constructors

34 Views Asked by At

We are instructed to write the Frac.h and Frac.cpp files given a driver program. The purpose is to build a class for Fraction ADT to perform arithmetic with fractions. I have written the following files but am receiving some compiler errors.
C2512 'Fraction': no appropriate default constructor available C2665 'Fraction::Fraction': no overloaded function could convert all the argument types

Driver file (Professor wrote this):

// driver for cmpsc122 Lab 4
#include "Frac.h"
#include <iostream>
using namespace std;
int main() {
    Fraction x(-3, 8), y(-15, -20), z, w(5);
    x.printFraction();  cout << " + ";  y.printFraction();
    z = x.add(y);
    cout << " = ";  z.printFraction();  cout << endl;
    z.printFraction();
    cout << " = ";  z.printFractionAsFloat();  cout << endl << endl;
    x.printFraction();  cout << " - ";  y.printFraction();
    z = x.subtract(y);
    cout << " = ";  z.printFraction();  cout << endl;
    z.printFraction();
    cout << " = ";  z.printFractionAsFloat();  cout << endl << endl;
    x.printFraction();  cout << " * ";  y.printFraction();
    z = x.multiply(y);
    cout << " = ";  z.printFraction();  cout << endl;
    z.printFraction();
    cout << " = ";  z.printFractionAsFloat();  cout << endl << endl;
    x.printFraction();  cout << " / ";  y.printFraction();
    z = x.divide(y);
    cout << " = ";  z.printFraction();  cout << endl;
    z.printFraction();
    cout << " = ";  z.printFractionAsFloat();  cout << endl;

#ifdef _WIN32 // _WIN32 is used by Visual C++
#if (_MSC_VER <= 1916) // check if it Visual Studio 2017 or earlier
system("pause");
#endif
#endif
    return 0;
}
/Sample run:
-3/8 + 3/4 = 3/8
3/8 = 0.375
-3/8 - 3/4 = -9/8
-9/8 = -1.125
-3/8 3/4 = -9/32
-9/32 = -0.28125
-3/8 / 3/4 = -1/2
-1/2 = -0.5
Press any key to continue . . .
*/

Frac.cpp (I wrote this)

#include "Frac.h"
#include <iostream>
#include <iomanip>

using namespace std;

Fraction Fraction::add(Fraction myFrac)
{
    int newNum;
    int newDom;
    newNum = myFrac.num + num;
    newDom = myFrac.dom + dom;

    Fraction i(newNum, newDom);

    return i;
}

Fraction Fraction::subtract(Fraction myFrac)
{
    int newNum;
    int newDom;
    newNum = num - myFrac.num;
    newDom = dom - myFrac.dom;

    Fraction i(newNum, newDom);

    return i;
}

Fraction Fraction::multiply(Fraction myFrac)
{
    int newNum;
    int newDom;
    newNum = num * myFrac.num;
    newDom = dom * myFrac.dom;

    Fraction i(newNum, newDom);

    return i;
    }

Fraction Fraction::divide(Fraction myFrac)
{
    int newNum;
    int newDom;
    newNum = num / myFrac.num;
    newDom = dom / myFrac.dom;

    Fraction i(newNum, newDom);

    return i;
}

void Fraction :: printFraction()
{
    cout << num << "/" << dom;
}

void Fraction::printFractionAsFloat()
{
    float i = float(num) / float(dom);

    cout << fixed << setprecision(3);

    cout << i;
}`

Frac.h (and this)

#ifndef FRAC_H
#define FRAC_H
class Fraction
{
public:
    Fraction(int myNum, int myDom);

    Fraction add(Fraction myFrac);

    Fraction subtract(Fraction myFrac);

    Fraction multiply(Fraction myFrac);

    Fraction divide(Fraction myFrac);

    void printFraction();

    void printFractionAsFloat();

private:
    int num;
    int dom;

};

#endif

I have tried creating a default constructor but all my attempts have just created more errors.

0

There are 0 best solutions below