在C ++中,我有一个像这样的对象的数组指针:
vector<Articulation*> artic;
我有下一个问题。当我将该向量发送到另一个类,如&amp; artic。所以我有指针而不是所有数组都重复。问题是下一个问题。在新类中,我有一个数组指针对象的ponter
vector<Articulation*>* pArtic;
在新课程中我做了pArtic [i] - &gt; move()。该方法在Articulation中实现。当我做方法mov()时,QT告诉我类型std :: vector&lt; _Ty&gt;没有运营商 - &gt;。那是因为,我认为,我无法访问Articulation对象,我试图在向量上移动()。
任何人都知道如何访问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
}
就是这个例子。
答案 0 :(得分:2)
问题是,你正在调用pArtic的第i个位置的方法move(),它是一个指针向量的指针。你想要做的是调用指针移动向量的位置i。
(*pArtic)[i]->move()
这就是你想要做的事情,但是小心,我猜这不太安全......
更好的方法是通过期待artic
引用而不是指针来仅放弃引用vector<>&
。
答案 1 :(得分:0)
将QT对象直接存储在容器上(除非确实需要使用指针)。这是因为QT实现了隐式共享和COW(写时复制),每次传递容器时都会消除容器的复制开销。通过根据需要通过值或引用传递容器,使界面更简单易用。
同样,当你有更好的机制(比如智能指针)时,在C ++中使用原始指针总是很危险的。智能指针使您的程序异常安全,同时管理原始指针的生命周期。