Niezdefiniowany symbol na funkcji przeciążania operatora szablonu

Mam deklarację funkcji:

template<class T>
a::A& a::A::operator<<(T out) {
    std::cout << out;
    return (*this);
}

i ta definicja funkcji:

namespace a {
    ...
    class A {
        ...
        template<class T> A& operator<<(T);

I nazywam to:

a::A b;
b << 1;

a to jest Makefile:

app: main.o A.o
    g++ main.o A.o -o app

main.o: main.cpp
    g++ -c main.cpp

A.o: A.cpp
    g++ -c A.cpp

i daje mi to:

Niezdefiniowane symbole: a :: A i a :: A :: operator << <int> (int)

dlaczego?

questionAnswers(2)

yourAnswerToTheQuestion