class help!!!!!

I dont know why its not acknowledging the base class. Please help me understand what I am doing wrong.

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
  // main.cpp
#include"Bird.h"
#include"Mammal.h"

int main()
{
	Bird bird("pelican", 8.5, "gray");
	bird.showAnimal();
	Mammal mammal("cow", 500, "black");
	mammal.showAnimal();


	return 0;
}
// ===================================================================
//Animal.h
#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
#ifndef ANIMAL_H
#define ANIMAL_H

class Animal
{
protected:
	string _name;
	double _weight;
public:
	Animal(string name, double weight);
	~Animal();

};
#endif
// ===================================================================
// Animal.cpp
#include"Animal.h"
Animal::Animal(string name, double weight)
{
	_name = name;
	_weight = weight;
}
Animal::~Animal(){}

// ===================================================================
// Bird.h
#include"Animal.h"

#ifndef BIRD_H
#define BIRD_H

class Bird : public Animal
{ 
private:
	string _featherColor;
public:
	Bird(string name, double weight, string featherColor);
	~Bird();
	void showAnimal();

};
#endif
// ===================================================================
// Bird.cpp
#include"Bird.h"
Bird::Bird(string name, double weight, string featherColor)
{
	_featherColor = featherColor;
}
Bird::~Bird(){}
void Bird::showAnimal()
{
	cout << "Birds are vertebrates in the Aves class.\n";
	cout << "This " << _name << "has " << _featherColor << " feathers and weighs " << _weight << "pounds.\n";
}

// ===================================================================
// Mammal.h
#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
#include"Animal.h"
#ifndef MAMMAL_H
#define MAMMAL_H

class Mammal : public Animal
{
private:
	string _hairColor;
public:
	Mammal(string name, double weight, string hairColor);
	~Mammal();
	void showAnimal();

};
#endif
// ===================================================================
// Mammal.cpp
#include"Mammal.h"
Mammal::Mammal(string name, double weight, string hairColor)
{
	_hairColor = hairColor;
}
Mammal::~Mammal(){}
void Mammal::showAnimal()
{
	cout << "Mammals are vertebrates in the Mammalia class.\n";
	cout << "This " << _hairColor << _name << " weighs " << _weight << "pounds.\n";
}
// ===================================================================


The Animal class is my base class and the Mammal and Bird classes are derived classes from the Animal class.
------ Build started: Project: hw 10a, Configuration: Debug Win32 ------
Mammal.cpp
c:\users\suha\documents\visual studio 2010\projects\hw 10a\hw 10a\mammal.cpp(5): error C2512: 'Animal' : no appropriate default constructor available
Bird.cpp
c:\users\suha\documents\visual studio 2010\projects\hw 10a\hw 10a\bird.cpp(4): error C2512: 'Animal' : no appropriate default constructor available

these are the error messages^
1
2
3
4
Bird::Bird(string name, double weight, string featherColor)
{
	_featherColor = featherColor;
}


class Bird is derived from the base class Animal
When you are creating an instance of derived class, it's constructor has to invoke base-class constructor at first. In the lines above, no base-class constructor is called, so compiler tries to call implicit constructor. But since you have already created one constructor, implicit constructor has to be created explicitly - or just add base-class constructor call as shown below

1
2
3
4
Bird::Bird(string name, double weight, string featherColor) : Animal(name, weight)
{
	_featherColor = featherColor;
}


for Mammal it's the same
Last edited on
THANK YOU SOO MUCH!
Topic archived. No new replies allowed.