gpt4 book ai didi

C++ 如何将 std::vector 类型的指针设置为 std::vector 类型的对象

转载 作者:行者123 更新时间:2023-11-30 01:25:44 26 4
gpt4 key购买 nike

背景:

我正在用 C++ 构建一个物理引擎,用于计算笛卡尔空间中 n 体系统的引力演化,然后将其转换为任何一组预定义的坐标系。最终目标是使起始坐标系任意(在坐标系“n”中计算,而不仅仅是笛卡尔坐标系),但这是一个遥远的目标。

问题:

因为坐标系应该是可以互换的,所以我让笛卡尔坐标系扩展了一个基本坐标系:

class CoordMember {
}

class CoordState {
public:
/* methods to operate on members */

protected:
std::vector<CoordMember*> members;
}

class Particle : public CoordMember {
}

class CartState : public CoordState {
}

尝试创建类型为 std::vector<Particle*> 的指针时出现错误它指向 std::vector<CoordMember*> 类型的成员对象:

CartState* state = new CartState(/* initialization vars */);
std::vector<Particle*>* parts = static_cast< std::vector<Particle*>* >(&state->members);

编译器错误是:

error: static_cast from 'std::vector<CoordMember *> *' to 'std::vector<Particle *> *' is not allowed
error: no viable overloaded '='

我现在知道 state->members 中的数据都是 Particle* 类型.我不知道必须做些什么才能使这个 Actor 阵容成为可能。有什么想法吗?

tl;博士:

std::vector<Derived*>* ptr = static_cast< std::vector<Base*>* >(&object);
static_cast from 'std::vector<Derived*>*' to 'std::vector<Base*>*' is not allowed

最佳答案

转换不起作用,因为 vector完全不相关。您必须将每个单独的对象转换到 vector 中。

关于C++ 如何将 std::vector<Derived*> 类型的指针设置为 std::vector<Base*> 类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11820490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com