0

The following code produces a runtime error, in which calling methods of the class produces no result.

MAIN.cpp:

#include "carClass.h"
#include <fstream>
#include <iostream>
#include <string>
#include <iostream>
#include <iomanip>

using namespace std;

string VIN;
int miles;
string dealer;
int price;

int main(int argc, char** argv) {

    char command;
    ifstream infile;
    ofstream outfile;

    //Checks if the data file exists

    infile.open("base.txt", ifstream::in);
    outfile.open("base.txt", ios_base::app);

    cout << "Enter a command:" << endl;
    cin >> command;
    while (command != 'q') 
    {
        switch (command) 
        {       
            case 'a':
            {
                cin >> command;
                if (command == 'c') 
                {
                 //Gets user input
                    cin >> VIN >> miles >> dealer >> price;

                 //Creates new pointer variable with the user data
                    Car* vehicule = new Car(VIN, miles, dealer, price);
                    VIN=vehicule->getVin();                     
                    cout << "vehicule object VIN is: " << VIN;
                    //end of for loop
                }//end of if loop            
            }//end of case loop
            break;
        }//end of switch
        cout << "Enter a command:" << endl;
        cin >> command;
    }//end of while loop
    outfile.close();
    infile.close();
    return 0;
}

Here is where I try to call the method to my object pointer VIN=(*vehicule).getVin();

I also tried vehicule->getVin(); and it did not work


Here is where I check if anything was stored and returns blank cout << "vehicule object VIN is: " << VIN;

And if you wanna see here you have both source and header files

carClass.cpp:

#include "carClass.h"
#include <string>
#include <iostream>
#include <fstream>
using namespace std;

Car::Car()
{
    string VIN; 
    int mileage=0; 
    string dealership; 
    int price=0;
    string vinCode;
}

Car::Car(string vin, int miles,string carDealer, int dollars)
{
    string VIN=vin; 
    int mileage=miles; 
    string dealership=carDealer; 
    int price=dollars;
    string vinCode = VIN.substr(0,3); 

}

void Car::addToBase(ofstream& file)
{
    file << "c" << endl << VIN << endl << this->mileage << endl <<
            this->dealership << endl << this->price << endl; 
    return;
}

carClass.h:

#ifndef CAR_H
#define CAR_H
#include <string>
#include <iostream>
#include <fstream>
using namespace std;

class Car {
    public:
        Car();
        Car(string, int, string, int);
        void addToBase(ofstream&);
        string getVin(){return VIN;}
        int getMiles(){return mileage;}
        string getDealer(){return dealership;}
        int getPrice(){return price;}
        string getVinCode(){return vinCode;}

    private:
        string VIN;
        int mileage;
        string dealership;
        int price;
        string vinCode;
};  
#endif

2 Answers 2

3

The variables are being properly read from stdin. The problem is with your constructors though:

Car::Car()
{
    string VIN; // local variable (this and all the other variables)!
    int mileage=0; 
    string dealership; 
    int price=0;
    string vinCode;
}

Car::Car(string vin, int miles,string carDealer, int dollars)
{
    string VIN=vin;  // local variable (this and all the other variables)! 
    int mileage=miles; 
    string dealership=carDealer; 
    int price=dollars;
    string vinCode = VIN.substr(0,3); 

}

In both of them you are using a local variable (i.e. its scope is the constructor's scope). You should be using member variable instead, like so:

Car::Car()
{
    // Default constructor, no need to initialize VIN (though you may want to initialize it to some default value of course) 
    mileage=0; 
    price=0;
}

Car::Car(string vin, int miles,string carDealer, int dollars)
{
    VIN=vin; // VIN is a member variable 
    mileage=miles; 
    dealership=carDealer; 
    price=dollars;
    vinCode = VIN.substr(0,3); 
}
Sign up to request clarification or add additional context in comments.

Comments

1

Change

string VIN=vin;

to

VIN=vin;

in your Car constructor. Otherwise you just write to a local variable instead of the class attribute.

The same applies to all other class attributes you are trying to set in that same constructor.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.