2

我有以下结构:

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 分配给 vector 时,就会发生std::vector<void*> newParents错误std::vector<base_peer*>& newParents

我从 Eclipse 收到以下错误:

没有已知的参数 1 从 'std::vector' 到 'const std::vector&' 的转换

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

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

我会很感激你的帮助。

4

2 回答 2

3

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

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

这只有效,因为任何指针都可以直接转换为 void 指针。如果您void 指针转换,则需要使用强制转换,您可以使用std::transform.

于 2013-05-18T17:18:05.227 回答
0

模板实例化后,vector<void*>vector<base_peer*>完全不同的具体类,完全没有继承关系。除非定义了赋值运算符,否则它将不起作用。

您可以这样做,newPacket->newParents[index] = newParents[index];因为这会将指针分配给通用指针。

于 2016-02-27T02:43:30.523 回答