I am new to C++. I am learning Inheritance in C++. I am unable to understand the compile time error. I have Super class Measurable and Car and Country derive from Measurable. In Measurable I have pure virtual function getMeasurable which is overridden by subclass. I have Data class which iterate through Measurable objects (Cars or Country) and compute average.
I am hitting the error
measure.cc: In function ‘int main()’:
measure.cc:70: error: invalid conversion from ‘Car**’ to ‘Measurable**’
measure.cc:70: error: initializing argument 1 of ‘static int Data::avg(Measurable**, int)’
Code
#include <iostream>
class Measurable ;
class Measurable {
public:
virtual int getMeasurable() = 0 ;
};
class Country: public Measurable {
private:
int size ;
public:
Country(int size): size(size) {
}
int getMeasurable() {
return size ;
}
};
class Car: public Measurable {
private:
int mileage ;
public:
Car(int size): mileage(size) {
}
int getMeasurable() {
return mileage ;
}
};
class Data {
public:
static int avg ( Measurable* obj[] , int num) {
double size = 0 ;
for (int i = 0 ; i < num ;i++)
{
size += obj[i]->getMeasurable() ;
}
return size/num ;
}
};
int main () {
Car* fleet[] = {
new Car (1) , new Car (2) , new Car (3) , new Car (4)
};
double sum = Data::avg (fleet ,4) ;
}