Popping?

So this is my code-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
#include <cstdlib>
#include <vector>
using namespace std;

class Car
{
private:
    string reportingMark;
    int carNumber;
    string kind;
    bool loaded;
    string destination;
public:
    Car();
    Car(const Car &ptr);
    Car(const string reportingMark,const int carNumber,const string kind,const bool loaded, const string destination);
    ~Car();
    void setUp(const string, const int, const string, const bool, const string);
    void output();
    friend bool operator ==(Car a,Car b);
    Car &operator=(const Car & carB);
};
/* ******************default constructor***********************
calls setUp member function and set default values to the following variables
*/
Car::Car ()
{
    reportingMark = " ";
    carNumber = 0;
    kind = "other";
    loaded = false;
    destination = "NONE";
}
/* ******************copy constructor***********************
same as default constructor
*/
Car::Car(const Car &ptr)
{
    reportingMark = ptr.reportingMark;
    carNumber = ptr.carNumber;
    kind = ptr.kind;
    loaded = ptr.loaded;
    destination = ptr.destination;
}
/*/******************constructor***********************
A constructor that accepts five constant reference parameters.
*/
Car::Car (const string reportingMark,const int carNumber,const string kind,const bool loaded, const string destination)
{
    setUp(reportingMark ,carNumber ,kind ,loaded ,destination );
}
/* ******************** Car::operator= ********************
sets the values in the left hand object from the right hand object
*/
Car & Car::operator=(const Car & carB)
  {
  setUp(carB.reportingMark, carB.carNumber, carB.kind, carB.loaded, carB.destination);

  return * this;
  }

/* ******************destructor***********************
does nothing
*/
Car::~Car(){}

class StringOfCars
{
private:
    Car* ptr;
    static const int ARRAY_SIZE = 10;
    int carCount;

public:
    StringOfCars();
    StringOfCars(const StringOfCars &otherStringOfCars);;
    ~StringOfCars();
    void output();
    void push(const Car &car);
    void pop(Car &car);
};
StringOfCars::StringOfCars()
{
    ptr = new Car[ARRAY_SIZE];
    carCount = 0;

}
StringOfCars::StringOfCars(const StringOfCars &otherStringOfCars)
{
    ptr = new Car[otherStringOfCars.ARRAY_SIZE];
    for(int i = 0; i < otherStringOfCars.carCount; i++)
    ptr[i] = otherStringOfCars.ptr[i];
    carCount = otherStringOfCars.carCount;
}
StringOfCars::~StringOfCars()
{
    delete [] ptr;
}
void StringOfCars::output()
{
    if(carCount == 0)
    {
        cout << "NO CARS" << endl;
    }else
    {
        for(int i = 0; i < carCount; i++)
        {
            ptr[i].output();
        }
    }
}

void StringOfCars::push(const Car &car)
{
    if(carCount == ARRAY_SIZE)
    {
        cout << "Car space is full." << endl;
    }else
    {
        ptr[carCount] = car;
        carCount++;
    }
}

void StringOfCars::pop(Car &car)
{
    if(carCount == 0)
    {
        cout << "The string of cars is empty." << endl;
    }else
    {
        carCount--;
        car = ptr[carCount];
    }
}
void input (StringOfCars&);

/*/******************setup***********************
 takes five parameters by value, puts data in object.
*/
void Car::setUp(string rMark, int cNum, string cKind, bool cLoaded, string dest)
{
   reportingMark = rMark;
   carNumber = cNum;
   kind = cKind;
   loaded = cLoaded;
   destination = dest;

}
/* ******************function operator***********************
 tests to see if two objects are equivalent.
*/
bool operator ==(Car a,Car b)
{
 if(a.reportingMark == b.reportingMark && a.carNumber == b.carNumber)
    return true;
 else
    return false;
}
/*/******************output***********************
 prints data.
*/
void Car::output()
{
    cout << setw(20) << left <<"AAR Reporting Mark:" << setw(8)  << left << reportingMark << endl;
    cout << setw(20) << left <<"Car Number:" << setw(8)  << left << carNumber << endl;
    cout << setw(20) << left <<"Kind:" << setw(8)  << left << kind << endl;
   switch (loaded)
   {
   case 1:
    cout << setw(20) << left << "Loaded: " << setw(8)  << left << "true" << endl;
    break;
   default:
    cout << setw(20) << left << "Loaded: " << setw(8)  << left << "false" << endl;
   }
    cout << setw(16) << left <<"Destination:" << setw(8) << left << destination << endl;
}
/*/******************main***********************
 has six variables, , calls input, setup, and output.
*/
int main()
{
    cout << "TEST 1" << endl;
    Car car1("SP", 34567, "box", true, "Salt Lake City");
    Car2 = car1;
    car2.output();

    cout << "TEST 2" << endl;
   StringOfCars string1;
   input(string1);
   string1.output();
   
    cout << "TEST 3" << endl;
    Car car3;
    string1.pop(car3);
    car3.output();


    cout << "String1" << endl;
    string1.output();
    return 0;

}
/*/******************input***********************
 global function, takes variables as ref parameters and reads in from user
*/
void input(StringOfCars &string1)
{
    string carType;
    string reportingMark;
    int carNumber;
    string kind;
    bool loaded;
    string destination;
    int cLoaded;

    ifstream inputFile;
    inputFile.open("cardata.txt", ios::in);
    if(inputFile.fail())
    {
        cerr << "Cannot open file." << endl;
        exit(1);
    }
    while (inputFile.peek() != EOF)
    {
        while(inputFile.peek() == ' ')
        {
                inputFile.get();
        }

    inputFile >> carType;
    inputFile >> reportingMark;
    inputFile >> carNumber;
    inputFile >> kind;
    inputFile >> loaded;
    getline(inputFile, destination);

    Car temp( reportingMark, carNumber, kind, loaded, destination);
    temp.output();
    }
}

What the lab asks me to do is
"2. Test the StringOfCar push function.

Add to main:

Print: TEST 2

Create a default StringOfCars object named string1.

Pass string1 to the input function.

Use the same file as in problem D1.

Print: STRING 1

In the main function, print string1.

3. Test the StringOfCars pop function.

Add to main:

Print: TEST 3

Create a car named car3.

Pop one car from string1 into car3.

Print: CAR 3

Print car3.

Print: STRING 1

Then print the contents of string1 again"
I'm having trouble getting both of these to work, I had thought I did it right. any ideas?
What should the function 'input' do? In other words, how does it use the parameter 'string1'?
(Line 243 prints 'temp'. I don't think that input should print anything. What to do with the temp?)


Aside from that, does your program compile? If not, what are the compiler error messages? Start from the first error. Each error message should mention a line number.
Topic archived. No new replies allowed.