Derived classes question

I'm working on an assignment for my C++ class where we have to create two derived classes: Auto and Transmission from base class of Inventory. I am done creating the header file for Auto class, however, I am now having issues with my Transmission class. I copied and pasted the code from the Auto class into the Transmission class, and basically just changed Auto to Transmission, and I am getting the errors "string does not name type" and "string has not been declared". I am not getting these errors in the Auto class, but I am in the Transmission class. I've been working on it for the past hour to try to come up with a solution and would like any help :-). Thanks in advance!

PS: The only difference between the Auto and Transmission classes was that I had to change manufacturer to vendor, which is what is giving me the problems, the string vendor.

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
//Auto class header file (the one that is working)
#ifndef H_AUTO
#define h_AUTO
#include <string>
#include <iomanip>
class Auto : public Inventory

{

string manufacturer;

public:

Auto(int q, int r, double p, string d, string man);

~Auto();

string getManufacturer();

void print();

};

//definition for class Auto

Auto::Auto(int anyQuan, int anyReorder, double anyPrice, string anyDesc, string anyManufacturer)

:Inventory(anyQuan, anyReorder, anyPrice, anyDesc)

{

manufacturer = anyManufacturer;

}

void Auto::print()

{

cout << setiosflags(ios::fixed);

cout<<setprecision(2); //display decimal point to 2 place after decimal

cout << "Quantity Is: " << getQuant() << endl;

cout << "Re-Order Number Is: " << getReorder() << endl;

cout << "The Price of Each Item Is: " << getPrice() << endl;

cout << "Description: " << getDescrip() << endl;

cout << "Manufacturer: " << manufacturer << endl;

}

string Auto::getManufacturer()

{

return manufacturer;

}

Auto::~Auto()

{
}
#endif

//Transmission class header file (the one that is not working)
  #ifndef H_TRANSMISSION
#define h_TRANSMISSION
#include <string>
#include <iomanip>
class Transmission : public Inventory

{
	
string vendor; //Here is where the compiler says I am getting the problem

public:

Transmission(int q, int r, double p, string d, string ven);

~Transmission();

string getVendor();

void print();

};

//definition for class Transmission

Transmission::Transmission(int anyQuan, int anyReorder, double anyPrice, string anyDesc, string anyVendor)
:Inventory(anyQuan, anyReorder, anyPrice, anyDesc)
{

vendor = anyVendor;

}

void Transmission::print()

{

cout << setiosflags(ios::fixed);

cout<<setprecision(2); //display decimal point to 2 place after decimal

cout << "Quantity Is: " << getQuant() << endl;

cout << "Re-Order Number Is: " << getReorder() << endl;

cout << "The Price of Each Item Is: " << getPrice() << endl;

cout << "Description: " << getDescrip() << endl;

cout << "Vendor: " << vendor << endl;

}

string Transmission::getVendor()

{

return vendor;

}

Transmission::~Transmission()

{
}
#endif 
Last edited on
You need to include the header where you find the class Inventory as well.

Without using namespace std; you need to prepend std:: like std::string vendor;
1
2
3
4
#ifndef H_AUTO
#define h_AUTO

#endif // matches #ifndef H_AUTO 

First, note that H_AUTO != h_AUTO. Treat macro names as case sensitive.


Second, neither header uses the std:: scope in any form. Therefore, the code that includes there headers makes std scope visible for one of them.

These are headers. Use explicit std:: in them (std::string, std::cout, etc).

Hint, you could add using std::cout; using std::endl to lines 39 and 106 so that within those function scopes you could still use plain cout and endl. (Although, I'd replace endl with '\n').
Last edited on
Thank you all ! I got it to work! I appreciate your help!
Topic archived. No new replies allowed.