У меня есть родительский классэкранным метод другого класса от вектора
class Data
{
};
классы, которые наследуют от класса данных:
class Struct : public Data
{
public:
Struct & AddNewType (const string & name, Data * x)
{
v . push_back (x);
return *this;
}
void Print (void) const
{
for (unsigned int i = 0; i < v . size(); i++)
cout << v[i]->GetSize();
}
private:
vector<Data*> v;
};
class Integer : public Data
{
public:
int GetSize (void) const
{
return 4;
}
};
Основная функция:
int main (void)
{
Struct a;
a . AddNewType ("Integer", new Integer);
a . Print();
return 0;
}
Когда я называю a.Print()
его дает мне эту ошибку:
practice.cpp: In member function ‘void Struct::Print() const’:
practice.cpp:40:21: error: ‘class Data’ has no member named ‘GetSize’
cout << v[i]->GetSize();
Может ли кто-нибудь сказать мне, как это исправить? Основная цель состоит в том, чтобы хранить различные типы псевдоданных в векторе. Но когда я хочу, чтобы вектор цикла с этими типами данных и вызывал функцию GetSize, он дает мне ошибку, которую я написал выше.
Похоже, что вам нужно [урок] (http://www.tutorialspoint.com/cplusplus/cpp_polymorphism.htm) на полиморфизм. – NathanOliver
@NathanOliver Да, я делаю – kvway
Пожалуйста, не используйте предыдущие или завершающие пробелы с '.' или' -> '. – Nacho