2014-03-26 5 views
0

Я хочу добавить контакт по некоторому индексу, и я не могу понять, почему этот код не работает.Я хочу добавить объект в список контейнеров

У меня проблема с этой линии:

a = (*it); 

и это одна:

tmp.push_back(listOf[a]); 

Это код:

void insert(list<Contact> &listOf, int index, const Contact &info) { 

    list<Contact> tmp; 
    int a; 
    for(list<Contact>::iterator it = listOf.begin(); it != listOf.end(); it++) 
    { 
     a = (*it); 
     if(a == index) 
     { 
      tmp.push_back(info); 
      index -= 2; 
      it--; 
     } 
     else 
      tmp.push_back(listOf[a]); 
    } 
    listOf = tmp; 
} 

У меня есть структура Связаться с именем и фамилией (строка).

Возможно, что-то не так с этими двумя линиями? Или это весь код неправильный? Если это так, я был бы рад, если бы кто-то смог получить мне решение.

+1

'* it' - тип контакта, это не' int' – billz

+0

'(* it);' дает 'Contact' не' int'. Чтобы индекс использовал отдельный счетчик. –

+1

вы можете использовать std :: vector вместо std :: list в своей программе. Это сделало бы вашу жизнь очень легкой, так как вы хотите что-то сделать с индексом в контейнере. –

ответ

1

Проблема заключается в том, что вы ожидаете, что список будет таким же, как вектор, и может использоваться взаимозаменяемо.

Прежде всего, когда вы разыскиваете итератор, он возвращает тип контейнера, в вашем случае - экземпляр Contact. Во-вторых, вы не можете использовать индексирование типа массива на std::list.

Чтобы решить первую проблему, вы должны сами отслеживать индексы.

Чтобы решить вторую проблему, у вас уже есть итератор и можете использовать его в push_back вызове:

tmp.push_back(*it); 
+0

Решает мою проблему, но теперь у меня есть одна новая в этой строке, если (a == index). Я получаю эту ошибку: нет соответствия для 'operator ==' в 'a == index' – user3127680

+0

@ user3127680 Тогда, я думаю, вы изменили 'a' на' Контакт'. Вам все еще нужно, чтобы оно было целым числом, инициализировалось до нуля и увеличивалось в цикле. –

1

Это кажется, что класс (или структура) Контакт не имеет функции преобразования, которая преобразует объект типа Обратитесь к объекту типа int. Так что этот код неверен

int a; 
//,,, 
    a = (*it); 

, потому что тип выражения *it является Contact не Int.

Также класс std::list не имеет оператора подстроки. Поэтому это заявление

tmp.push_back(listOf[a]); 

также недействителен, и компилятор должен выдать сообщение об ошибке.

+0

Он решает мою проблему, но теперь я получил одну новую в этой строке, если (индекс == ==). Я получаю эту ошибку: нет соответствия для 'operator ==' в 'a == index' – user3127680

+0

@ user3127680 Если a не имеет типа int и, например, имеет тип Contact, то для объектов этих типов нет оператора ==. Какой тип? –

+0

Тип контакта. Как я могу проверить, где вставить, если они не одного типа? – user3127680

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