Я ужасен в шаблонах, как есть. Мне не уделялось много времени. У меня много проблем с получением моей шаблонной программы с двойным соединением для моего класса структур данных. Я, наконец, получил его для компиляции без ошибок один раз, но затем он имел ошибку во время выполнения (what(): basic_string::_S_construct null not valid
) и разбился.Шаблоны, классы друзей и их конструкторы
template<class T> class DoublyLinkedList;
{...}
template<class T> class DListNode {
...
friend class DoublyLinkedList<T>;
};
template<class T> class DoublyLinkedList {
...
protected: DListNode<T> header, trailer;
public:
DoublyLinkedList<T>() : header(0), trailer(0) // constructor
{ header.next = &trailer; trailer.prev = &header; }
DoublyLinkedList<T>(const DoublyLinkedList<T>& dll); // copy constructor
~DoublyLinkedList<T>(); // destructor
...
}
Я должен объявить DoublyLinkedList
класса выше DListNode
, потому что он является другим порядком? Значения нуля для header
и trailer
равны нулю, поскольку в первой части задания, где мне приходилось создавать программу без шаблонов только для списков типа int
, и мой профессор просто сказал нам скопировать и вставить его в новый файл и «преобразовать» его в шаблонную версию, поэтому я знаю, что это, вероятно, не должно быть равным нулю.
Ошибка, показанная выше, происходит правильно, когда программа достигает первого конструктора в файле main.cpp, DoublyLinkedList<string>
; поэтому я знаю, что это вызывает конструктор. Помогите, пожалуйста, я очень потерян!
вы инициализируете 'std :: string' (или, возможно,' std :: wstring') с аргументом 0 в качестве аргумента. это неверно. однако он не показан ни в одном из кода, который вы здесь представляете. –
Я понимаю это. Но независимо от того, что я ввел в качестве аргумента для конструктора, он не будет инициализироваться для всех типов. Поэтому моя проблема заключается в том, что я не знаю, как создать «адаптивный» конструктор, который инициализирует заголовок и трейлер «нулевым» значением своего владельца. – UnworthyToast
Думаю, я должен был сказать, что заголовок и трейлер имеют тип DListNode. Я добавлю изменения. –
UnworthyToast