2013-12-13 1 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

Смежные вопросы