mbae059
mbae059

Reputation: 9

template class header file

I'm trying to implement stack data structure using singly linked list.

This is the header file that has template class of Node and List

#pragma once

template <typename E>
class SNode {
    E elem;
    SNode<E>* next;
public:
    friend class SLinkedList<E>;
};

template <typename E>
class SLinkedList {
private:
    SNode<E>* head;
public:
    SLinkedList();
    ~SLinkedList();
    bool empty() const ();
    const E& front() const;
    void addFront(const E& e);
    void removeFront();
};
template <typename E>
SLinkedList<E>::SLinkedList() : head(NULL) {}

template <typename E> 
SLinkedList<E>::~SLinkedList() {
    while(!empty()) removeFront();
}

template <typename E> 
bool SLinkedList<E>::empty() const {
    return head==NULL;
}

template <typename E> 
const E& SLinkedList<E>::front() const {
    return head->elem;
}

template <typename E> 
void SLinkedList<E>::addFront(const E& e) {
    SNode<E>* tmp = new SNode<E>;
    tmp->elem = e;
    tmp->next=head;
    head=tmp;
}

template <typename E> 
void SLinkedList<E>::removeFront() {
    SNode<E>* old = head;
    head=head->next;
    delete old;
}

This is a simple main code

#include <iostream>
#include "SNode.h"
using namespace std;

int main() {
    SNode<int> A(1);
    SNode<int> B(2);
    SLinkedList<int> L();
    L.push(A);
    L.push(B);
    return 0;
}

When I compile this code the compiler says SLinkedList is not a class template I have no idea why it says that since I did put template

Upvotes: 0

Views: 212

Answers (2)

Jarod42
Jarod42

Reputation: 218005

You have vexing parse with

SLinkedList<int> L();

Which declares a.. function L, taking no parameters, and returning SLinkedList<int>.

Use

SLinkedList<int> L;

or

SLinkedList<int> L{};

Upvotes: 0

The Philomath
The Philomath

Reputation: 992

You need to forward declare the SLinkedList templated class. like this:-

template <typename E>
class SLinkedList;

template <typename E>
class SNode {
    E elem;
    SNode<E>* next;
public:
    friend class SLinkedList<E>;
};
...

There are other errors in you code. I hope you are able to resolve them by youself.

Upvotes: 2

Related Questions