C++ 将派生对象存储在基类型的向量中

C++ 将派生对象存储在基类型的向量中,c++,inheritance,polymorphism,derived,C++,Inheritance,Polymorphism,Derived,我有一个基类类型指针的std::vector: vector<Base*> baseList; 但是当我迭代列表并调用由派生类从基类重写的函数时,派生类中的代码不会被调用。我使用向量的方式正确吗 My基类在声明其函数之前使用了virtual关键字,派生类派生基类时使用: class Derived : public Base 知道我做错了什么吗 编辑: 要调用我声明的函数,请执行以下操作: typedef vector<App*>::iterator AppItera

我有一个基类类型指针的std::vector:

vector<Base*> baseList;
但是当我迭代列表并调用由派生类从基类重写的函数时,派生类中的代码不会被调用。我使用向量的方式正确吗

My基类在声明其函数之前使用了virtual关键字,派生类派生基类时使用:

class Derived : public Base
知道我做错了什么吗

编辑:

要调用我声明的函数,请执行以下操作:

typedef vector<App*>::iterator AppIterator;
AppIterator begin() { return l_Apps.begin(); }
AppIterator end()   { return l_Apps.end(); }

问题可能在这里吗?

我尝试了迭代器。。。这个代码对我来说很好,所以如果你的问题仍然存在,考虑不同的编译器=)



此外,您还可以尝试使用虚拟方法来强制转换指针,即使这会破坏使用虚拟方法的全部意义。祝你好运。

我觉得不错。您如何调用该函数?请仔细检查您尝试调用的函数是否标记为
virtual
。需要更多详细信息。用最小(ish)基类和派生类做一个模型,检查是否可以重复这个问题。如果没有,请与您的实际用途进行比较,以了解原因;如果是,在这里报告。我同意凯文·巴拉德的观点。确保派生类的函数也使用虚拟关键字。。
typedef vector<App*>::iterator AppIterator;
AppIterator begin() { return l_Apps.begin(); }
AppIterator end()   { return l_Apps.end(); }
for (AppIterator it = begin(); it != end(); ++it)
{
    (*it)->Initialize();
}
#include <iostream>
#include <vector>

class Base
{
public:
    virtual void f()
    {
        std::cout << "Base\n";
    }
};
class Derived: public Base
{
public:
    virtual void f()
    {
        std::cout << "Derived\n";
    }
};
int main()
{
    std::vector<Base*> s;
    s.push_back(new Base());
    s.push_back(new Derived());
    s.push_back(new Base());
    s.push_back(new Derived());
    s.push_back(new Base());
    s.push_back(new Derived());
    for (std::vector<Base*>::iterator it = s.begin(); it != s.end(); ++it)
    {
        (*it)->f();
    }
    return 0;
}
Base
Derived
Base
Derived
Base
Derived