2013-12-13 80 views
-1

我的代碼如下:c + +在結構插入

struct d 
{ 
    char name[5]; 
}; 

vector<d> my_d; 
my_d.resize(3); 

strcpy(my_d[0].name, "mike"); 
strcpy(my_d[1].name, "joe"); 

//how to insert "anna" between "mike" and "joe" 
my_d.insert(my_d.begin()+1, "anna");//doesn't work??? 

我試圖插入元件之間的元件,如示出的上方。但編譯器拒絕編譯,No instance of overloaded function maches the agreement list.

+2

爲什麼使用固定長度的'char'數組和'strcpy',而不是'std :: string'? –

+0

你從編譯器得到什麼錯誤? –

+1

但是你的問題的答案是:'insert'希望你給它一個相關類型的對象。這裏的相關類型是'd'。 '「anna」'不是'd'。 –

回答

2

沒有從字符串文字(const char*)到d類型的隱式轉換。你必須使新d結構,將字符串複製到它,然後將其添加到my_d

d newItem; 
strcpy(newItem.name, "anna"); 
my_d.insert(my_d.begin()+1, newItem); 

如果你想隱式類型轉換,您需要提供在d結構這樣一個構造函數:

struct d { 
    char name[5]; 

    d(const char* name_) { 
     strcpy(name, name_); 
    } 
} 
+0

或者爲'd'提供一個合適的構造函數。 – JBentley

+0

它的作品,但沒有更優雅的東西?如何在結構上使用構造函數? – SkyRipper

+0

很酷,非常感謝! – SkyRipper