2014-07-27 92 views
1

我正在使用一些容器。參考矢量存在問題,無法正常檢測。C++ 11如何在向量中使用引用?

error C2039: 'vecMsg' : is not a member of 'std::_Vector_iterator <std::_Vector_val>std::_Simple_types<T2 &>>>' 

爲什麼不能識別成員變量?

vector<T1> vec1; 
vector<T2> vec2; 

vector<T1>::iterater iVec1; 
vector<T2>::iterater iVec2; 
vector<T2&>::iterater iInVec; 

struct T1 
{ 
public: 
    vector<T2&> inVec; 
} 

struct T2 
{ 
public: 
    vector<std::string> vecMsg; 
} 

輸入vec1.inVec

for(iVec1 = vec1.begin(); iVec1 != vec1.end(); iVec1++) 
{ 
    for(iVec2 = vec2.begin(); iVec2 != vec2.end(); iVec2++) 
    { 
      // blaa if 

      iVec1->inVec.push_back(*iVec2); 

    } 
} 

訪問vecMsg一些數據vec1.inVec

for(iVec1 = vec1.begin(); iVec1 != vec1.end(); iVec1++) 
{ 
    for(iInVec = iVec1->inVec.begin(); iInVec != iVec1->inVec.end(); iInVec++) 
    { 
     // Error occurs here. 
     int nSize = iInVec->vecMsg.size(); 
    } 
} 
+0

'iterater' ...? :P – cHao

+1

引用的向量不可能。 – deviantfan

回答

4

一般來說,一旦你已經初始化引用指向某個對象,你不能更改。這就是爲什麼你不能創建引用向量。使用指針或智能指針的矢量。

+0

謝謝。我再次感受到基礎知識的重要性。 –

2

你不能有引用的::std::vectorSee this post瞭解更多詳情。您是否有理由不能使用::std::vector<T2 *>

要小心的是 - 這載體保存原始指針,這樣的IT是指它不會負責銷燬T2 ...

+0

Ugh'std :: shared_ptr'。 – rightfold

+0

@πάνταῥεῖ:如果你指的是對象清理的問題,我完全意識到這一點。但是,當原始指針完全合適時, – linguamachina

+2

使用原始指針向量沒有任何內在的錯誤。只是不要嘗試刪除內容。原始指針是非常有用和實用的工具,並非每個參考都需要擁有指針。 – Puppy