-1
노드 클래스를 노드 (다음 노드, 데이터) 노드로 사용하는 연결된 목록 클래스를 만들려고합니다. Linked List 클래스는 멤버 함수를 포함하고 모든 데이터 유형 (즉, 템플릿)과 함께 사용할 수있는 목록의 헤더 역할을합니다. 클래스 선언 및 멤버 함수 구현 내에서 템플릿이 작동하는 방식을 이해하는 데 어려움을 겪고 있습니다.C++ 템플릿 클래스 멤버 함수, 다른 템플릿 클래스 의존
내가 링크 된 목록이 개 템플릿 클래스가 (여기에는 관련 부분입니다) : 컴파일에
template<typename NodeObjectType>
class ListNode
{
public:
NodeObjectType data;
ListNode<NodeObjectType>* next;
ListNode() : next(NULL){}
ListNode(const NodeObjectType& item, ListNode<NodeObjectType>* nextNode = NULL)
{
data = item;
next = nextNode;
}
};
template<typename ObjectType>
class myList
{
public:
myList()
{
Head = NULL;
}
// Other member Functions ...
bool contain(ObjectType x)
{
ListNode<ObjectType> *current = Head;
while (current != NULL)
{
if (current->data == x)
return true;
current = current->next ; // move forward one step
}
return false;
}
void add(ObjectType x)
{
if(!contain(x))
{
ListNode<ObjectType>* NewListNode(x , Head);
Head = NewListNode;
}
}
private:
ListNode<ObjectType>* Head;
};
나는 오류
In instantiation of 'void myList<ObjectType>::add(ObjectType) [with ObjectType = int]':
required from here
error: expression list treated as compound expression in initializer [-fpermissive]
내가 잘못 전달 템플릿 개체 유형을하고있는 중이 야를 얻을 아니면 다른 것입니까?
ListNode<ObjectType>* NewListNode(x , Head);
가 있어야한다 : 당신에게
이 템플릿과는 아무 상관이 없습니다. 'T x (a, b); '는 스택에서'a'와'b'를 생성자에 전달하는'T'를 만듭니다. 'T * px = new T (a, b);'는 힙에'a'와'b'를 생성자에게 건네줍니다. 'T * px (a, b); '는 구문 오류 인 Frankensteinian 엉망입니다. –
아, 이제 알겠습니다. 고마워요. – Evan