Справка по сращиванию списков C ++ - PullRequest
0 голосов
/ 22 мая 2011

Я пытаюсь склеить этот список, но я получаю сообщение об ошибке, в котором отсутствует функция соответствия при вызове склейки.Насколько я знаю, все мои #include верны.

Ошибка поступает из каждой строки, которая вызывает temp.

void DeckOps::encrypt(int msize, list<int> *L){

    int jokeA = 27;
    int jokeB = 28;
    string keystream;

    list<int>::iterator a = std::find(L->begin(), L->end(), jokeA);
    list<int>::iterator new_position = a;
    for(int i=0; i < 1 && new_position != L->begin(); i++)
        new_position--;

    L->insert(new_position, 1, *a);

    L->erase(b);

    list<int>::iterator aa = L->begin();
    int sec;
    for(; aa != L->end(); aa++){
        if(*aa == jokeA || *aa == jokeB)
            break;  //aa is at 1st inlist either 27 or 28                                                                                                    
    }
    if(*aa == jokeA){
        sec = jokeA;
    } else {
        sec = jokeB;
    }
    list<int>::iterator bb = std::find(L->begin(), L->end(), sec);   

    // everything works up to this point it seems
    list<int> temp;
    temp.splice(temp.end(), L, aa, bb);
    temp.splice(temp.end(), L, bb);
    temp.splice(temp.end(), L, begin(), aa);
    L->splice(L->end(), L, aa);
    L->splice(L->end(), temp);

    //testing                                                                                                                                          
    std::copy(L->begin(), L->end(), std::ostream_iterator<int>(std::cout, " "));
}

Ответы [ 2 ]

4 голосов
/ 22 мая 2011

L - указатель, вам нужно разыменовать его.

temp.splice(temp.end(), *L, aa, bb);

Или вы, конечно, можете передать его по ссылке вместо вас.

1 голос
/ 22 мая 2011

У функции сплайсинга есть прототипы, объявленные как:

void splice ( iterator position, list<T,Allocator>& x );
void splice ( iterator position, list<T,Allocator>& x, iterator i );
void splice ( iterator position, list<T,Allocator>& x, iterator first, iterator last );

Второй параметр L, который вы передаете функциям, объявляется как указатель:

list<int> *L

Это приводит к ошибке несоответствия функции, потому что нет функции сплайсинга, которая принимает второй параметр в качестве указателя. Вы должны разыменовать указатель L, чтобы соответствовать прототипу функции splice.

temp.splice(temp.end(), *L, aa, bb);
temp.splice(temp.end(), *L, bb);
temp.splice(temp.end(), *L, begin(), aa);
...