Mario
Mario

Reputation: 123

C++ templates and friends, linker error

Why does the following code not compile (linker error, unresolved external symbol, class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class cClass<int> const &)" (??6@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AEAV01@AEBV?$cClass@H@@@Z))

#include <iostream>

template <class Type> class Class{
    public:
        friend std::ostream& operator<<(std::ostream& Stream, const Class& Op);
};

template <class Type> std::ostream& operator<<(std::ostream& Stream, const Class<Type>& Op){
    return(Stream);
}

int main(){
    Class<int> A;

    std::cout << A;

    return(0);
}

Upvotes: 1

Views: 225

Answers (1)

skypjack
skypjack

Reputation: 50568

This line:

friend std::ostream& operator<<(std::ostream& Stream, const Class& Op);

Should be:

template <class T> friend std::ostream& operator<<(std::ostream& Stream, const Class<T>& Op);

Upvotes: 5

Related Questions