相关疑难解决方法(0)

C++ 多态性和向量,将向量的派生类指向向量的基类

说:Apple 是从 FruitPicker 基类派生的,那么 ApplePicker 类是从 FruitPicker 基类派生的。
ApplePicker 类有一个vector<Apple> appleList,Fruit picker 类有一个指向vector<Fruit>ie的指针vector<fruit>* fruitList

我需要能够将向量设置为该指针,以便可以在水果选择器类中运行抽象方法(因为它们只涉及水果成员)。但当我尝试这样做时,我在设置时遇到了麻烦:

this->fruitList = &(this->AppleList);
Run Code Online (Sandbox Code Playgroud)

它给了我错误cannot convert to vector<Apple> to vector<Fruit>。我尝试了静态转换,它给了我同样的错误。我对非向量基类和派生类做了类似的事情,效果很好。

我是 C++ 新手,我通过 NDK 在 Android 上使用它。

我试图做的事情也是不可能的,我必须使用像 这样的指针向量vector<Fruit*>

c++ polymorphism pointers vector

4
推荐指数
1
解决办法
1112
查看次数

自动将指向派生类的指针列表转换为指向基类的指针列表

让我们说我有一个基类和派生类,以及一个带有指向基类的stl向量的函数:

class A { public: int x; };

class B : public A { };

void foo(const vector<A*> &va) {
    for (vector<A*>::const_iterator it = va.begin(); it < va.end(); it++)
        cout << (*it)->x << endl;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法将指针列表传递给派生类?即:

vector<B*> vb;
// ... add pointers to vb ...
foo(vb);
Run Code Online (Sandbox Code Playgroud)

以上将导致以下编译器错误:

error: could not convert ‘vb’ from ‘std::vector<B*>’ to ‘std::vector<A*>’
Run Code Online (Sandbox Code Playgroud)

即使B*可转换为A*.

最后,如果有一个普通指针的解决方案,它是否也适用于boost共享指针?

c++ inheritance stl

2
推荐指数
1
解决办法
2133
查看次数

标签 统计

c++ ×2

inheritance ×1

pointers ×1

polymorphism ×1

stl ×1

vector ×1