gpt4 book ai didi

c++ - 通过引用传递指针 vector 并替换 void* 指针 vector

转载 作者:搜寻专家 更新时间:2023-10-31 01:49:23 25 4
gpt4 key购买 nike

我有以下结构:

typedef struct{
int pktType;
void* sourcePeer;
void* destPeer;
void* aboutPeer;
int tree;
std::vector<int> cogSize; //LEAVE ?
std::vector<void*> newParents; //JOIN_REP
}packet;

此外,我还有一个名为 base_peer 的类声明如下:

class base_peer
{
...
public:
virtual void createMessage(int, base_peer*, base_peer*, base_peer*, int, std::vector<int>&, std::vector<base_peer*>&, packet*);
...
}

createMessage()函数定义如下:

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;
}

我要createMessage创建数据包结构并为其元素分配值。更具体地说,当我尝试分配给 vector 时会发生错误 std::vector<void*> newParents vector std::vector<base_peer*>& newParents .

我从 Eclipse 中得到以下错误:

no known conversion for argument 1 from 'std::vector' to 'const std::vector&'

std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(const std::vector<_Tp, _Alloc>&) [with _Tp = void*; _Alloc = std::allocator]

no match for 'operator=' in 'newPacket->packet::newParents = newParents' base_peer.cpp

非常感谢您的帮助。

最佳答案

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

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

这之所以有效,是因为任何指针都可以直接转换为 void 指针。如果您要从 void 指针转换,则需要使用强制转换,您可以使用 std::transform 来完成。

关于c++ - 通过引用传递指针 vector 并替换 void* 指针 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16626887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com