2

在 C++ 中,我有一个这样的对象数组指针:

vector<Articulation*> artic;

我有下一个问题。当我将该向量发送到像 &artic 这样的另一个类时。所以我有指针,而不是所有数组都重复。问题是下一个。在新类中,我有一个数组指针对象

vector<Articulation*>* pArtic;

在新课程中,我执行 pArtic[i]->move()。该方法在 Articulation 中实现。当我执行 mov() 方法时,QT 告诉我类型 std::vector<_Ty> 没有运算符 ->。那是因为,我认为,我无法访问 Articulation 对象,并且我正在尝试对向量执行 move() 。

任何人都知道我必须做什么才能访问 Articulation 对象并执行 move() 方法?

例子:

A类:

vector<Articulation*> artic;

void A::initVector(){...}
void A::sendInfoToB(){
B nuevo();
B.send(&artic);
}

B类:

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

}

C类:

void C::sendTheLast(vector<Articulation*>* artic)
{
string data=artic[i]->move();
//Move returns a String
}

这就是例子。

4

2 回答 2

2

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

(*pArtic)[i]->move()

这就是您想要做的,但是请注意,我想这并不安全...

artic更好的方法是通过期望vector<>&引用而不是指针来仅放弃引用。

于 2013-08-23T07:32:03.320 回答
0

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

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

于 2013-08-23T07:41:37.377 回答