функция не принимает итератор для auto_ptr

Я написал несколько некорректных кодов сжатия Хаффа, которые пытался исправить. Первым делом я переключил указатели на auto_ptr (Есть причины, по которым я не использовал другой умный указатель). Я создаю вектор auto_ptr но когда я пытаюсь передать auto_ptr в функцию *(vector.begin()) это не работает

Мой код функции, который я пытаюсь передать владельцу (это функция-член как set_node):

struct Node {
int weight;
char litteral;
auto_ptr<Node> childL;
auto_ptr<Node> childR;
void set_node(int w, char l, auto_ptr<Node>& L(), auto_ptr<Node>& R()){
weight = w;
litteral = l;
childL = L;
childR = R;
}
};

и вот как я пытаюсь это назвать (р является узлом):

p.set_node(w, '*', *nodes->begin(), *(nodes->begin()+1));

Вот как объявлен вектор:

vector<auto_ptr<Node> >* nodes = new vector<auto_ptr<Node> >;

2

Решение

Вы не могу использование std::auto_ptr в std::vector, Вам нужно будет найти альтернативу. Проблема в том, что нет копия в std::auto_ptr, Конструктор копирования в некотором смысле переехать операция, которая крадет содержимое из исходного автоматического указателя и перемещает его в новый. Эта операция требует, чтобы источник был неконстантным std::auto_ptr (так как он удаляет управляемый объект из него).

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]