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
创建一个数据包结构并为其元素赋值。更具体地说,当我尝试分配给vectorstd::vector newParents
a vectorstd::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*
,因为我有一个循环依赖性问题:structpacket
应该知道base\u peer
类,反之亦然。我找不到解决此问题的方法。@user2397244:尝试使用vector
而不是vector
。@user2397244:也许你应该先问一个关于这个问题的问题。@BenjaminLindley你可能是对的:我以为void指针可以解决最初的问题。。。