river
river

Reputation: 734

The instantiation of the template class is wrong

The g++ compiler prompt the following statement is wrong:

template<typename Type>
class SingleList{
public:
    SingleList()
        {
            head =  new SingleListNode<Type> () ;    //Error happens here!!!
        }

The error message is :

 ./inc/single_list.h: In instantiation of ‘SingleListNode<int>’:
./inc/single_list.h|39 col 13| instantiated from ‘SingleList<Type>::SingleList() [with Type = int]’

The definition of head is the following, maybe problem is not related here.

SingleListNode<Type> *head;

The instantiation of class SingleList in main function is :

int main()
{
    SingleList<int> list;

I don't know where the syntax error happens, can anyone help me? Thanks!!

========================================================================

The following is the content of source file:

    template<typename Type> class SingleList;

template<typename Type> class SingleListNode{
private:
    friend class SingleList<Type>;

    SingleListNode() : next(NULL){}

public:
    friend ostream& operator<< <Type>(ostream& os,SingleListNode<Type>& sln);             //Error here!!

private:
    SingleListNode *next;
};

template<typename Type> ostream& operator<<(ostream& os,SingleListNode<Type>& out){
    os<<out.data;
    return os;
}

template<typename Type> class SingleList{
public:
    SingleList()
        {
            head =  new SingleListNode<Type> () ;              //Error happens here.
        }
    ~SingleList(){
        delete head;                                       //Same error
    }

private:
    SingleListNode<Type> *head;
};

The error message prompted by g++

|| g++ -g -I ./inc/ -c single_list_test.cpp  -o single_list_test.o
|| single_list.h: In instantiation of ‘SingleListNode<int>’:
single_list.h|25 col 13| instantiated from ‘SingleList<Type>::SingleList() [with Type = int]’
single_list_test.cpp|9 col 18| instantiated from here
single_list.h|10 col 18| error: template-id ‘operator<< <int>’ for ‘std::ostream& operator<<(std::ostream&, SingleListNode<int>&)’ does not match any template declaration
|| make: *** [single_list_test.o] Error 1

Upvotes: 0

Views: 215

Answers (1)

river
river

Reputation: 734

To my gcc , just modify the following statement

friend ostream& operator<< <Type>(ostream& os,SingleListNode<Type>& sln)

to

 friend ostream& operator<< (ostream& os,SingleListNode<Type>& sln)

Upvotes: 1

Related Questions