C++ 通过引用传递指针向量并替换void*指针向量

C++ 通过引用传递指针向量并替换void*指针向量,c++,C++,我的结构如下: typedef struct{ int pktType; void* sourcePeer; void* destPeer; void* aboutPeer; int tree; std::vector<int> cogSize; //LEAVE ? std::vector<void*> newParents; //JOIN_REP }packet; 而createMessage()函数的定义如下: class base_peer { ... p

我的结构如下:

typedef struct{
int pktType;
void* sourcePeer;
void* destPeer;
void* aboutPeer;
int tree;
std::vector<int> cogSize; //LEAVE ?
std::vector<void*> newParents; //JOIN_REP
}packet;
createMessage()
函数的定义如下:

class base_peer
{
    ...
public:
virtual void createMessage(int, base_peer*, base_peer*, base_peer*, int, std::vector<int>&, std::vector<base_peer*>&, packet*);
    ...
}
void base_peer::createMessage(int msgType, base_peer* msgSourcePeer, base_peer* msgDestPeer, base_peer* msgAboutPeer, int msgAboutTree, std::vector<int>& msgCogSize, std::vector<base_peer*>& newParents, packet* newPacket)
{
    newPacket->pktType = msgType;
    newPacket->sourcePeer = msgSourcePeer;
    newPacket->destPeer = msgDestPeer;
    newPacket->aboutPeer = msgAboutPeer;
    newPacket->tree = msgAboutTree;
    newPacket->cogSize = msgCogSize;
    newPacket->newParents = newParents;
}     
void base_peer::createMessage(int-msgType,base_peer*msgSourcePeer,base_peer*msgDestPeer,base_peer*msgAboutPeer,int-msgAboutTree,std::vector&msgCogSize,std::vector&newParents,packet*newPacket)
{
newPacket->pktType=msgType;
newPacket->sourcePeer=msgSourcePeer;
newPacket->destPeer=msgDestPeer;
newPacket->aboutPeer=msgAboutPeer;
newPacket->tree=msgAboutTree;
newPacket->cogSize=msgCogSize;
newPacket->newParents=newParents;
}     
我希望
createMessage
创建一个数据包结构并为其元素赋值。更具体地说,当我尝试分配给vector
std::vector newParents
a vector
std::vector&newParents
时,会发生错误

我从Eclipse中得到以下错误:

参数1从“std::vector”到的转换未知 “const std::vector&”

std::vector&std::vector::operator=(常量) std::vector&[带_Tp=void*;_Alloc= std::分配器]

“newPacket->packet::newParents”中的“operator=”不匹配= newParents's base_peer.cpp


非常感谢您的帮助。

您必须手动或使用迭代器复制元素。最简单的方法是使用
std::vector
assign
成员函数

newPacket->newParents.assign(newParents.begin(), newParents.end());

这仅仅是因为任何指针都可以直接转换为空指针。如果要从void指针转换,则需要使用强制转换,可以在模板实例化后使用
std::transform

执行强制转换,
vector
vector
是完全不同的具体类,根本没有继承关系。除非定义了赋值运算符,否则它将不起作用


你可以做一个
newPacket->newParents[index]=newParents[index]因为这会将指针分配给通用指针。

为什么
void*
?这对我来说是一种代码味道。实际上我使用的是
void*
,因为我有一个循环依赖性问题:struct
packet
应该知道
base\u peer
类,反之亦然。我找不到解决此问题的方法。@user2397244:尝试使用
vector
而不是
vector
。@user2397244:也许你应该先问一个关于这个问题的问题。@BenjaminLindley你可能是对的:我以为void指针可以解决最初的问题。。。