いくつかのフレンド演算子を持つテンプレート クラスがあります。コンパイラは、「フレンド宣言が非テンプレート関数を宣言しています」と文句を言います。残念ながら、このエラーを解決する方法がわかりません。ヒントはありますか?
コードは次のようになります。
template<typename X> class Vect
{
protected:
X v1_;
X v2_;
X v3_;
public:
Vect( X v1, X v2, X v3 );
Vect( const Vect<X> &v);
~Vect();
void printVect( );
friend ostream& operator<<(ostream& os, const Vect<X>& v);
friend const Vect<X> operator*(Vect<X>& v, X n);
friend const Vect<X> operator*(X n, Vect<X>& v);
};
template<typename X> Vect<X>::Vect( X v1, X v2, X v3 )
: v1_(v1),v2_(v2), v3_(v3)
{
// v1_ = v1;
// v2_ = v2;
// v3_ = v3;
}
template<typename X> Vect<X>::Vect( const Vect<X> &v )
: v1_(v.v1_), v2_(v.v2_), v3_(v.v3_)
{
}
template<typename X> Vect<X>::~Vect( )
{
}
template<typename X> void Vect<X>::printVect( )
{
cout << "(" << v1_ << ", " << v2_ << ", " << v3_ << ")" << endl;
}
template<typename X> ostream& operator<<(ostream& os, const Vect<X>& v)
{
os << "(" << v.v1_ << ", " << v.v2_ << ", " << v.v3_ << ")" << endl;
return os;
}
template<typename X> const Vect<X> operator*(Vect<X>& v, X n)
{
Vect<X> tmp(v);
tmp.v1_ *= n;
tmp.v2_ *= n;
tmp.v3_ *= n;
return tmp;
}
template<typename X> const Vect<X> operator*(X n, Vect<X>& v)
{
return v*n;
}
事前に、
ジョナス