Вопрос о шаблоне / потоке C ++ по оператору

пытается заставить оператора работать, но выдает кучу ошибок:

мой заголовочный файл

template <unsigned short n>
class Vector {
public:
    std::vector<float> coords;

    Vector();
    Vector(std::vector<float> crds);
    friend std::ostream& operator <<(std::ostream& out, const Vector& v);
};

template <unsigned short n>
Vector<n>::Vector() {
coords.assign(n, 0.0);
}

template <unsigned short n>
std::ostream& operator<<(std::ostream& out, const Vector<n>& v) {
out << "(" << v.coords[1] << " - " << v.coords[2] << ")";
return out;
}

тестовый файл

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

int main() {
Vector<3> toomas;
cout << toomas;

}

ошибка:

C: \ CodeBlocks \ kool \ praks3 \ vector .h | 14 | предупреждение: объявление друга 'std :: ostream & operator << (std :: ostream &, const Vector &)' объявляет нешаблонную функцию |

C: \ CodeBlocks \ kool \ praks3 \ vector.h | 14 | примечание: (если это не то, что вы планировали, убедитесь, что шаблон функции уже был объявлен, и добавьте здесь <> после имени функции) |

obj \ Debug \ test.o || В функции `main ' : |

C: \ CodeBlocks \ kool \ praks3 \ test.cpp | 8 | неопределенная ссылка на ʻoperator << (std :: ostream &, Vector <(unsigned short) 3> const &) ' |

6
задан Jaanus 12 March 2011 в 18:18
поделиться