2011-07-06 40 views
1

於是,我就做一個載體,其元素是對一個結構指針和一個int的,而我開始認爲這是不可能的..vector <pair <aStruct *,int>>不可能?

假設我有以下結構:

struct node{ 
    string str; 
    int size; 
    node *child[3]; 
    node(string str1):str(str1){ size = 0;} 
}; 

和矢量:

vector< pair<node*,int> > nodvector; 

然後我試圖做一個新的節點,並把它的向量,顯然它不工作:

int main(){ 
    node* nod1 = new node("HELLO"); 
    node* nod2 = new node("WORLD"); 
    nodevector.push_back(pair<nod1,3>); 
    delete nod1; 
    delete nod2; 
} 

編譯器樹皮在我說: NOD1不能出現在恆定表達 錯誤:模板參數1無效 錯誤:在自變量2中爲模板結構的std模板參數列表類型/值不匹配::對

這是不可能的事情嗎? 有什麼可以替代解決方案呢? 您的輸入將會非常感謝!

+0

你必須閱讀一些C++教程。 –

+0

儘量不要在容器中存儲裸指針。這樣做很難做到正確的內存管理。 – kennytm

+0

當創建對添加到向量中時,您應該返回像這樣的模板參數(nod1,3) 通常,您可以對其進行typedef – gastush

回答

3

nodevector.push_back(pair < node *,int>(nod1,3));

+0

哦,上帝,我感到很愚蠢,非常感謝你!我覺得我缺乏睡眠.. – Mang

8

當您創建新對時,請改爲使用make_pair

所以此工程:nodevector.push_back(make_pair(nod1, 3));

1

問題是你正在使用nod13作爲模板參數一對:

nodevector.push_back(pair<nod1,3>); 

相反,嘗試:

nodevector.push_back(pair<node, int>(nod1,3)); 

或更好還有:

nodevector.push_back(make_pair(nod1,3)); 
0

創建一對對象。你還沒有創建它。

你認爲「對」是正確的語法嗎?

糾正它。

0

嘗試這樣的事情,你很困惑你模板參數爲應計類操作。

vector< pair<node*,int> > nodvector; 

node * nod1 = new node(「HELLO」); node * nod2 =新節點(「WORLD」); nodvector.push_back(pair(nod1,4)); 刪除nod1; 刪除nod2; }

1

以上所有答案都是正確的。

你的代碼試圖將「類型」推入向量中。這就是爲什麼編譯器很生氣:)。

你正在做的事情一樣

int i = 10; 
vector<int> v; 
v.push_back(int); 

顯然,我們希望

v.push_back(i); 

希望有所幫助。

相關問題