کلاس لینک لیست با استفاده از template - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

کلاس لینک لیست با استفاده از template

0 امتیاز

با سلام.من کلاس لینک لیست رو با template نوشتم.این ارور ها رو میده.کجای کد رو باید درست کنم؟

Error 10 error C2065: 'q' : undeclared identifier

Error 4 error C2440: '=' : cannot convert from 'Node *' to 'Node<T> *'

Error 6 error C2440: '=' : cannot convert from 'Node<T> *' to 'Node *'
Error 2 error C2512: 'Node' : no appropriate default constructor available
Error 1 error C2955: 'Node' : use of class template requires template argument list
 
// class linklist.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;
template <class T>
class Node
{
	T data;
	Node* next;
};
template <class T>
class linklist
{
private:
Node<int> *head;//in khat erro mide.
public:
	linklist ()
	{
		head=0;
	}
	linklist& operator=(const linklist & other)
	{
       if(this!=&other)
	   {
		   head=other.head;
	   }
	   return *this;
	}
	bool Add(T data)
	{
		Node* new_value=new Node;//error
		new_value->data=data;
		Node *p=*q=head;
		int flag=0;
		if(head==0)
		{
			head=new_value;
			new_value->next=0;
			return true;
		}
		while(p && p->data<data)
		{
			q=p;
			p=p->next;//error
			flag=1;
		}
		if(flag==0)
		{
			new_value->next=p;
			head=new_value;
		}
		else
		{
			p->next=new_value;
			new_value->next=q;
		}
		return true;
	}
	bool Remove(T data)
	{
		if(head==0)
		{
			cout<<"this list is empty"<<endl;
			return false;
		}
		Node *p=*q=head;
		int flag=0;
		while (p && p->data!=data)
		{
			q=p;
			p=p->next;
			flag=1;
		}
		if(flag==0)
		{
			head=p->next;
		}
		else
		{
		  q->next=p->next;

		}
		delete p;
		return true;
	}
	void showAll()
	{
		if(head==0)
		{
			cout<<"this list is empty"<<endl;
			return;
		}
        Node *p=head;
		int count=0;
		while(p)
		{
			cout<<"argumant"<<'['<<count<<']'<<p->data<<endl;
			p=p->next;
		}
	}
	bool find(T data)
	{
		node * p=head;
	while(p)
	{
		if(p->data==value)
			return true;
		p=p->nextptr;
	}
	return false;
	}
	~linklist()
	{
		Node *p,*q;
		while(p)
		{
	       q=p;
		   p=p->next;
		   delete q;
		}
	}
};
int _tmain(int argc, _TCHAR* argv[])
{
	linklist<int> a;
	a.Add(-3);
	a.Add(5);
	a.Add(7);
	a.Add(0);
	a.Add(15);
	a.showAll();
	a.Remove(7);
	a.showAll();
	return 0;
}

 

 
 
 

 

سوال شده فروردین 24, 1393  بوسیله ی maryam (امتیاز 338)   12 33 44
دوباره تگ گذاری شد مهر 9, 1393 بوسیله ی BlueBlade

1 پاسخ

+3 امتیاز
 
بهترین پاسخ

شما وقتی که یک کلاس رو به شکل template میسازی مثلا

template <class T>
class Node
{
    T data;
    Node* next;
};

 

برای ساخت شی ازش باید نوعشو هم مشخص کنی یعنی خارج از کلاس :

Node<int> node;
Node<double> node;
...

 

داخل کلاس هم به همین شکل :

template <class T>
class Node
{
    T data;
    Node<T>* next;
};

همه ی شی هایی که از Node ساختی همین  مشکل رو دارن

در ضمن اعضای کلاس بصورت پیش فرض private تعریف میشن

وقتی می خوای خارج از کلاس دسترسی داشته باشی طبیعتا یا باید از struct استفاده کن یا قیلد ها رو public  کنی

template <class T>
struct Node
{
    T data;
    Node<T>* next;
};

 

این ایرادات رو برطرف کن کدت اجرا میشه

پاسخ داده شده فروردین 25, 1393 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد فروردین 27, 1393 بوسیله ی maryam
...