0
최근 템플릿을 사용하여 속편을 구현하려고했습니다. 이템플릿으로 deque를 구현할 때의 문제
int main(){
deque<int> qq(1);
qq.push_front(2);
qq.push_front(3);
qq.print_in_order();
return 0;
}
를 작동하고이 코드는 컴파일하지 않는지 여기
#pragma once
#include <iostream>
using namespace std;
template<typename Type>
struct Node {
Node();
Node<Type>* next = NULL;
Node<Type>* prev = NULL;
Type data;
};
template<typename Type>
class deque{
private:
Node<Type>* front = NULL;
Node<Type>* back = NULL;
public:
deque(Type key);
~deque();
Node<Type>* back();
Node<Type>* front();
int size();
bool empty();
void push_front(Type key);
void push_back(Type key);
void pop_front();
void pop_back();
void print_in_order();
};
template<typename Type>
deque<Type>::deque(Type key)
{
if (front != NULL || back != NULL)
return
else
{
front = new Node<Type>();
front->data = key;
prev = front;
}
}
template<typename Type>
deque<Type>::~deque()
{
Node<Type>* delPtr;
while (front->prev != NULL)
{
delPtr = front;
cout << "Deleted " << front->data<<endl;
front = front->prev;
delete delPtr;
}
back = NULL;
delete front;
}
template<typename Type>
Node<Type>* deque<Type>::back()
{
if(back!= NULL)
return back;
else
return NULL
}
template<class Type>
Node<Type>* deque<Type>::front()
{
return front;
}
template<typename Type>
int deque<Type>::size()
{
int counter = 0;
Node<Type>* temp = front;
while (temp->back != NULL)
{
counter++;
temp = temp->back;
}
return counter;
}
template<typename Type>
bool deque<Type>::empty()
{
if (front == NULL && back == NULL)
return true;
else
return false;
}
template<typename Type>
void deque<Type>::push_front(Type key)
{
Node<Type>* temp = new Node<Type>();
temp->data = key;
temp->prev = front;
front->next = temp;
front = temp;
}
template<typename Type>
void deque<Type>::push_back(Type key)
{
Node<Type>* temp = new Node<Type>();
temp->data = key;
temp->next = back;
back->prev = temp;
back = temp;
}
template<typename Type>
inline void deque<Type>::pop_front()
{
if (front != NULL) {
Node<Type>* delPtr = front;
front = front->prev;
front->next = NULL;
delete delPtr;
}
else
cout << "There is no front in empty deque" << endl;
}
template<typename Type>
void deque<Type>::pop_back()
{
if (back != NULL) {
Node<Type>* delPtr = back;
back = back->next;
back->prev = NULL;
delete delPtr;
}
else
cout << "There is no back in empty deque " << endl;
}
template<typename Type>
void deque<Type>::print_in_order()
{
if (front == NULL)
return;
Node<Type> temp = front;
while (temp->prev != NULL) {
cout << temp->data << " ";
temp = temp->prev;
}
cout << endl;
}
template<typename Type>
inline Node<Type>::Node()
{
}
그런 다음 몇 가지 코드를 확인하는 결과이다. 비슷한 프로젝트 나 버그를 찾는데 아무런 도움이되지 않았습니다. 그러므로 누군가가 잘못되어 가고있는 것을 설명 할 수 있다면 좋을 것입니다. 대부분의 오류는 같습니다. 예를 들어
back()
또는
front()
은 정적 멤버가 아니기 때문에 함수가 아니기 때문에 사용할 수 없습니다. 또는
back()
및
front()
클래스의 템플릿 구성원으로 함수 유형을받을 수 없습니다. 누군가가 도울 수 있기를 바랍니다.
"이 코드는 컴파일하고 싶지 않습니다"- 오류를 포함하십시오. 또한 - 이것은 ** far ** Minimal * 예제입니다. – Fureeish
Btw - 오류가 없어도 중복 된 선언을 볼 수 있습니다 ... 'private'에 포인터 인 Node * front가 있습니다. 'public'에는'front'라는 메서드가 있습니다. 오버로드를 다루지 않고 중복 된 이름을 가질 수는 없습니다.이 경우에는 그렇지 않습니다. –
Fureeish
이것은 이중 연결리스트입니다. 이중 링크 목록에 새 노드를 삽입하면 업데이트 할 수있는 링크가 4 개 있습니다. 또한 2를 업데이트하십시오. 또한 앞뒤 포인터는 같은 링크 된 목록을 참조하지 않는 것 같습니다. –