QT中数组指针对象的指针 在C++中,我有这样的对象的数组指针: vector<Articulation*> artic; vector-artic;

QT中数组指针对象的指针 在C++中,我有这样的对象的数组指针: vector<Articulation*> artic; vector-artic;,c++,arrays,qt,C++,Arrays,Qt,我有下一个问题。当我把向量发送给另一个类,比如&artic。所以我有指针,而不是所有的数组都被复制。问题是下一个。在新类中,我有一个数组指针对象的容器 vector<Articulation*>* pArtic; vector*parti; 在新类中,我执行pArtic[I]->move()。该方法是在铰接中实现的。当我执行方法mov()时,QT告诉我类型std::vector没有运算符->。这是因为,我想,我无法访问铰接对象,我正在尝试在向量上执行move() 有人知道我必须做

我有下一个问题。当我把向量发送给另一个类,比如&artic。所以我有指针,而不是所有的数组都被复制。问题是下一个。在新类中,我有一个数组指针对象的容器

vector<Articulation*>* pArtic;
vector*parti;
在新类中,我执行pArtic[I]->move()。该方法是在铰接中实现的。当我执行方法mov()时,QT告诉我类型std::vector没有运算符->。这是因为,我想,我无法访问铰接对象,我正在尝试在向量上执行move()

有人知道我必须做什么才能访问铰接对象并执行move()方法吗

例如:

A类:

vector<Articulation*> artic;

void A::initVector(){...}
void A::sendInfoToB(){
B nuevo();
B.send(&artic);
}
vector-artic;
void A::initVector(){…}
void A::sendInfoToB(){
B nuevo();
B.发送(和发送);
}
B类:

vector<Articulation*>* pArtic
void B::send(vector<Articulacion*>* art){
pArtic=art;
}
void B::sendToC()
{
C nuevo();
C->sendTheLast(pArtic);

}
向量*pArtic 无效B::发送(矢量*艺术){ parti=艺术; } void B::sendToC() { C nuevo(); C->sendTheLast(pArtic); } C类:

void C::sendTheLast(vector<Articulation*>* artic)
{
string data=artic[i]->move();
//Move returns a String
}
void C::sendTheLast(vector*artic)
{
字符串数据=artic[i]->move();
//Move返回一个字符串
}

这就是示例。

问题是,您正在调用pArtic第i个位置的方法move(),它是指向指针向量的指针。您要做的是在向量的位置i处调用指针的move方法

(*pArtic)[i]->move()
这就是你想做的,但要小心,这不是真的安全,我想


更好的方法是只提供引用
artic
,期望的是
向量&
引用,而不是指针。

将QT对象直接存储在容器上(除非确实需要使用指针)。这是因为QT实现了隐式共享和COW(写时复制),这消除了每次传递容器时容器的复制开销。通过根据需要通过值或引用传递容器,使接口更简单且易于使用


再次,在C++中使用原始指针总是有危险的,当你有更好的机制(比如智能指针)时。智能指针在管理原始指针的生命周期时使您的程序异常安全。

请提供简单的move()方法体。您能否提供一个小示例,说明您想做什么并重现问题?我无法理解你的问题。我不理解你的解决方案:不要调用
pArtic[I]->move()
你调用
(*pArtic)[I]->move()
,它工作了。谢谢!!但我有一个问题,为什么它有效?我不明白。我更新了答案,第一段应该解释一下。。。简言之:您有一个指向数组的指针,并试图获取第i个元素,但事实上,您在第i个内存单元中查找指针所在的元素。通过取消对指针的引用(添加*),您实际上得到了指向第i个元素的指针,并且可以调用该方法;)哦,我知道,我明白。谢谢您的时间:)