2014-05-01 53 views
0

我想在map函数内声明n个struct数组。代码片段如下,当我尝试执行m_channelInfo [destination] = newdata [chNum]时,它向我发出错误信息。和错误是, “无操作符匹配”=“操作数”我很困惑如何解决这个问题,或者我不能使用结构独立映射函数数组。请建议。std :: map <x,y>:如何在map函数内声明struct(y)数组

chNum=10; 
struct Record 
    { 
    int pkt; 
    double frameErrorRate; 
    double ProbabilityVector; 

    }; 


void ChannelUsageData (Mac48Address destination, Mac48Address retransmitter) 
{ 

    std::map<Mac48Address, Record>::iterator i = m_channelInfo.find (destination); 
    if (i == m_channelInfo.end()) 
    { 
     Record newdata[chNum]; 
     // std::vector<Record> newdata; 
     //Record newdata; 

     m_channelInfo[destination] = newdata; 

    } 
    i = m_channelInfo.find (destination); 
    NS_ASSERT (i != m_channelInfo.end()); 

} 
+0

显示的'Mac48Address' –

回答

0

声明m_channelInfostd::map<Max48Address, Record*>和定义迭代器作为 std::map<Mac48Address, Record*>::iterator i

,你还需要你的配置改变为动态数组,而不是静态的......

if (i == m_channelInfo.end()) 
{ 
    Record* newdata = new Record[chNum]; 

    m_channelInfo[destination] = newdata; 

} 

然后您将能够将该值指定为数组(指针) ,并且不要忘记在目标输出期间使用deleted[]正确删除内存

+0

@MattMcNabb的定义:这是不正确的,确实是'newdata'变量将不复存在,但指针值将被复制到地图上,因此内存也不会丢失 – NirMH

+0

@ MattMcNabb:在块结束时没有任何内容释放动态内存......用户需要自己删除[]指针。我不跟着你 – NirMH

+0

@MattMcNabb:好的,注意到...忽略我们的讨论:) – NirMH

0

在编译时,C++数组必须具有已知的大小。 Record newdata[chNum];是非法的。 (有些编译器将此作为扩展来实现,但使用它不太合适)。

目前尚不清楚你想在这里做什么:

m_channelInfo[destination] = newdata; 

你的地图需要Mac48Address,我推测是某种形式的结构,为Record。将一组记录分配到单个记录是没有意义的。

你能描述一下你期望的地图条目吗?

+0

Mac48Address不是一个结构,它的一串int值作为字符串。不幸的是,有一个错字,它应该是m_channelInfo.find(目的地)Insread Transmitter。 我将有多个目标mac48address,并针对每个mac地址(目标)我需要记录不同情况下的chNum数据。 该代码的作品,如果我只有结构,而不是数组的结构。但是我需要一个固定大小的struct数组。 – user3592008

+0

听起来像你想要的是'map >'那么?另外考虑使用'multimap'。 –

+0

雅我试过矢量。它引发相同类型的错误。最初我以为,错误是因为编译器不知道struct的大小。 我实际上不需要multimap。单个地图将做我的工作,我猜更容易。 – user3592008

相关问题