向量中另一类的重音方法
Accesing method of another class from vector
我有父类
class Data
{
};
从类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();
有人能告诉我怎么修吗?主要目的只是将不同的伪数据类型存储在向量中。但当我想用这些数据类型循环vector并从中调用函数GetSize时,它给了我上面发布的错误。
您的vector v
存储类型为Data*
的对象。但是,Data
类没有实现GetSize()
方法,因此编译器(正确地)会出错,因为该方法不存在。
子类实现它并不重要,因为编译器不知道你是在传递子类还是基类。
您应该将GetSize()
方法添加到Data类中,即
class Data {
public:
virtual int GetSize() const = 0;
}
这也强制子类实现GetSize()方法。如果你想提供默认行为,你可以提供一个默认实现,即
class Data {
public:
virtual int GetSize() const { return 0; };
}
相关文章:
- 获取从C++中同一类中的构造函数调用的方法返回的值
- 使用同一类中的方法重新分配字段时出现问题
- 有没有办法从同一类中的函子调用类方法?
- 从同一类中的另一个方法调用方法时出错
- C++采用同一类实例的类方法
- 如何将一个方法中的值返回到同一类的另一个方法
- 如何将数据从公共方法添加到同一类中的私有成员数组中?
- 什么可能导致方法不<<同一类中的字符串?
- Qt时隙方法(这是另一类)在发射信号时不触发
- 为什么pthread_create不在同一类中采用我的方法
- 有什么方法可以测试来自同一类的两个作业对象吗
- 将同一类的方法实现放在不同的对象文件中
- 一个类应使用功能指针调用另一类的方法
- 在模板类中:使用类方法作为另一类方法的模板参数
- 如何使一个方法在新线程中调用同一类中的另一个方法
- 方法无法访问同一类的成员变量 (C++)
- 同一类的不同方法中的指针向量
- 同一类中的虚拟方法与非虚拟方法
- 来自同一类的C++方法调用
- 向量中另一类的重音方法