2014-05-01 78 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

相關問題