c++ 템플릿 함수 소멸자에대해서 질문 있습니다. 괴수님들 부탁드립니다 ㅠㅠ
조회수 1151회
#pragma once
template <typename Elem>
class NodeList{
public:
class Node {
public:
Elem elem;
Node* prev;
Node* next;
};
//template <typename Elem> friend class NodeSequence;
public :
Elem& operator*() { return v->elem; };
bool operator==(const Node* p) const { return v == p.v; };
bool operator!=(const Node* p) const { return v != p.v; };
Node* operator++() { v = v->next; return *this; };
Node* operator--() { v = v->prev; return *this; };
private:
Node* v;
public:
NodeList() {
n = 0;
header = new Node;
trailer = new Node;
header->next = trailer;
trailer->prev = header;
};
virtual ~NodeList() {
while (!empty()) {
eraseFront();
}
};
int size() const {
return n;
};
bool empty() const {
return (n == 0);
};
Node* begin() const {
return header->next;
}
;
Node* end() const {
return (trailer);
};
void insertFront(const Elem& e) { insert(begin(), e); };
void insertBack(const Elem& e) { insert(end(), e); };
void insert( Node* const p,const Elem& e) {
Node*w = p;
Node*u = w->prev;
Node*v = new Node;
v->elem = e;
v->next = w; w->prev = v;
v->prev = u; u->next = v;
n++;
};
void eraseFront() {
erase(begin());
};
void eraseBack() {
erase(--end());
};
void erase(Node* const p) {
Node* w = p->next;
Node* u =p->prev;
u->next = w; w->prev = u;
delete v;
n--;
};
private:
int n;
Node* header;
Node* trailer;
};
template <typename Elem>
class NodeSequence :public NodeList<Elem> {
public:
NodeSequence() {
typename NodeSequence::NodeList::NodeList(); };
~NodeSequence() { typename NodeSequence::NodeList::~NodeList<Elem>(); };
typename NodeList<Elem>::Node* atIndex(int i) const {
typename NodeSequence::NodeList::Node* p= typename NodeSequence::begin();
for (int j = 0; j < i; j++)++p;
return p;
};
int indexof(const typename NodeList<Elem>::Node* p)const {
typename NodeSequence::NodeList::Node* q = typename NodeSequence::begin();
int j = 0;
while (q != p) {
++q; ++j;
}
return j;
}
};
#include <iostream>
using namespace std;
#include "sequence.h"
void main() {
typedef NodeSequence<int> IntSequence;
typedef NodeSequence<int>::Node* IntSequenceNodePtr;
int a[] = { 6, 7, 2, 5, 1, 4, 3 };
IntSequence ns;
for (int i = 0; i < 7; i++) ns.insertFront(a[i]);
cout << "A sequence of size = " << ns.size() << endl;
system("pause");
}
첫번째 코드는 sequence.h헤더파일이고, 두번째는 메인문 CPP파일 입니다. 헤더파일의 Sequence class 에서 생성자와 소멸자를 만드려는데 이와같은 에러가 뜹니다 ㅠㅠㅠ 어떻게 해야 할까요??
1 답변
-
아래와 같이 수정하여 컴파일 해보시기 바랍니다.
NodeSequence() { typename NodeSequence::NodeList::template NodeList<Elem>(); }; ~NodeSequence() { typename NodeSequence::NodeList::template ~NodeList<Elem>(); };
자세한 내용은 아래 링크에서 C7510 으로 검색하면 아래와 같은 내용을 확인할 수 있습니다.
https://docs.microsoft.com/ko-kr/cpp/cpp-conformance-improvements-2017?view=vs-2017
템플릿 키워드 및 중첩된 이름 지정자 /permissive- 모드에서 컴파일러는 종속된 중첩된 이름 지정자 뒤에 오는 경우 template 키워드가 템플릿 이름 앞에 오도록 요구합니다. /permissive- 모드에서 다음 코드는 C7510: 'foo': 종속 템플릿 이름은 'template'과 함께 사용해야 합니다. 참고: 컴파일 중인 클래스 템플릿 인스턴스화 'X'에 대한 참조를 확인하십시오. 를 생성합니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력