Я написал несколько некорректных кодов сжатия Хаффа, которые пытался исправить. Первым делом я переключил указатели на 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> >;
Вы не могу использование std::auto_ptr
в std::vector
, Вам нужно будет найти альтернативу. Проблема в том, что нет копия в std::auto_ptr
, Конструктор копирования в некотором смысле переехать операция, которая крадет содержимое из исходного автоматического указателя и перемещает его в новый. Эта операция требует, чтобы источник был неконстантным std::auto_ptr
(так как он удаляет управляемый объект из него).
Других решений пока нет …