2011-11-21 42 views
1

我的C++頭有一些代碼片段如下所示:如果找不到地圖元素會返回什麼?

private: 
    std::map<std::string, std::vector<std::vector<unsigned short> > > m_usIRDataPool; 

public: 
    std::vector<std::vector<unsigned short> >& IRChannelData(std::string sChannelName); 

在它的實現文件(的.cpp),IRChannelData()具有以下定義:

std::vector<std::vector<unsigned short> >& MyClass::IRChannelData(std::string sChannelName) 
{ 
    std::map<std::string, std::vector<std::vector<unsigned short> > >::iterator it = m_usIRDataPool.find(sChannelName); 

    if (it != m_usIRDataPool.end()) 
    { 
     return it->second; 
    } 

    // return ????; // How can I return? 
} 

那麼,什麼將返回如果沒有進入被找到(向量的向量)在m_usIRDataPool地圖容器擺脫

warning C4715: 'MyClass::IRChannelData' : not all control paths return a value. 
+2

你問你應該返回什麼?或者你問如果你不返回任何東西會返回什麼? –

+0

[返回數組元素時,非const引用無效初始化]的可能重複(http://stackoverflow.com/questions/7376985/invalid-initialization-of-non-const-reference-when-returning-an-array -element) – Nawaz

+0

@Ben:最後一句似乎表明前者。 – Xeo

回答

3
  • 返回一個指示bool成功/失敗,並通過一個「去」的語義參數返回結果向量的地址,或者
  • 引發異常,如果沒有元件在地圖發現
+0

謝謝你,好主意。我將在未來的編程中牢記您的建議。 – GoldenLee

0

返回一個指針,並返回0以防你找不到你要找的東西。

+0

謝謝!我改變了我的代碼。 – GoldenLee

+1

@GoldenLee:你不應該用給出的答案來編輯你的問題,否則所有的答案都將變得毫無意義。我回滾了你的編輯。 –

0

當你返回某個東西的引用時,你不能在該函數上聲明一個空映射然後返回它。你可以做的是在你想返回std::vector<std::vector<unsigned short> >的同一類型的MyClass MyClass::emptyReturnMap中聲明一個變量,然後返回它。但是如果你編輯它的內容(因爲返回不是const),你必須在每次調用時清除它。

+0

謝謝!有沒有什麼我可以做,但聲明一個向量的空載體,如std :: vector > m_v2DEmpty;?如果是這種情況,我寧願返回一個指針。 – GoldenLee

+0

不,作爲參考,它必須在函數結束後可用,如果您在函數內部聲明它,一旦函數超出範圍,變量將會丟失,您將得到一個內存訪問錯誤。該變量可能是靜態的。 – felipemaia

相關問題