Сразу бросается в глаза попытка вызвать один коструктор из другого, например:
SubNode(T val,ListNode * parent) : SubNode()
Так вызывается конструктор класса-предка, а перегруженный конструктор так вызвать не получится.
Еще нашел ошибку здесь:
next=parent=0;
parent и next — это указатели на разные типы (оператор присваивания parent=0 возврщает указатель на ListNode, а присваивать это дело пытается SubNode)
Пока что все, что могу сказать.
Здравствуйте, r1der, Вы писали:
R>R>template <typename T>
R>struct ListNode
R>{
R> struct SubNode
R> {
R> SubNode(T val,ListNode * parent) : SubNode()
R> {
R> if (debug) cout<<"SubNode constructor(T,parent)"<<endl;
this->>parent=parent;
R> *value=val;
R> }
R> SubNode(T val) : SubNode()
R> {
R> if (debug) cout<<"SubNode constructor(T)"<<endl;
R> *value=val;
R> }
R> SubNode()
R> {
R> if (debug) cout<<"SubNode default constructor"<<endl;
R> next=parent=0;
R> value=new T();
R> }
R> ~SubNode()
R> {
R> if (debug) cout<<"SubNode destructor"<<endl;
R> delete value;
R> }
R> void debug()
R> {
R> if (debug)
R> cout<<"\n\n-------- DEBUG PRINT -------\nstruct SubNode\nValue="<<*value<<" Value address="<<value<<"\nNext address:"<<next<<"\nParent address:"<<parent<<"\n----------------------------\n\n";
R> }
R> T * value;
R> SubNode * next;
R> ListNode * parent;
R> };
R> ListNode()
R> {
R> if (::debug) cout<<"ListNode default constructor"<<endl;
R> value=new T();
R> }
R> ListNode(T val) : ListNode()
R> {
R> if (::debug) cout<<"ListNode constructor(T)"<<endl;
R> *value=val;
R> }
R> ~ListNode()
R> {
R> if (::debug) cout<<"ListNode destructor"<<endl;
R> delete value;
R> }
R> void debug()
R> {
R> if (debug)
R> cout<<"\n\n-------- DEBUG PRINT -------\nstruct ListNode\nValue="<<*value<<" Value address="<<value<<"\nNext address:"<<next<<"\nChild address:"<<child<<"\n----------------------------\n\n";
R> }
R> T * value;
R> ListNode * next;
R> SubNode * child;
R>};
R>template <typename T>
R>struct SpecialList
R>{
R> SpecialList()
R> {
R> if (debug) cout<<"SpecialList default constructor"<<endl;
R> head=new ListNode<T>();
R> }
R> SpecialList(T val)
R> {
R> if (debug) cout<<"SpecialList constructor(val)"<<endl;
R> head=new ListNode<T>(val);
R> }
R> ~SpecialList()
R> {
R> ListNode<T> * temp;
R> for (ListNode<T> * current=head; head->next!=0;)
R> {
R> if (current->next!=0) temp=current->next;
R> cout<<"Delete element "<<current<<"\n";
R> delete current;
R> current=temp;
R> }
R> }
R> ListNode<T> * head;
R>};
R>
R>Имеются ли тут какие-то ошибки?
R>Как создать SubNode
R>ListNode::SubNode <int> ошибка, не получается.
R>Как проверить код на утечки памяти и "не красивые" места(стат.анализ)?
R>Может быть уже готовые структуры для этого, скажем в stl или boost, лучше первое конечно.
R>Лучше value везде хранить по указателю или же по значению? Делаю по указателю чтобы при копировании, например предавая в какой либо метод, или в качестве value выступает класс какой-нибудь, чтобы реже происхдило копирование этого объекта
R>Спасибо за ответы