Есть класс (template) template<class Vtype> class svtVector { protected: Vtype *r; // vectors components int n; // space dimension int T; // T = 0 - vector-columnl; T = 1 - vector-row int *ref_count; // references count public: svtVector(); svtVector(int); svtVector(const svtVector<Vtype> &); virtual ~svtVector();
svtVector<Vtype> &operator=(const svtVector<Vtype> &); svtVector<Vtype> &operator=(const Vtype &); svtVector<Vtype> operator+(const svtVector<Vtype> &); ..... };
я порождаю от него класс
class svtRVector : public svtVector<double> { private: static int rnd; // flag for random-generator initialization public: svtRVector(); svtRVector(int); svtRVector(const svtRVector &R):svtVector<double>(R) {};
void Random(); void PrintSelf() const; };
Для начала хочу добиться работоспособности оператора "="
template <class Vtype> svtVector<Vtype> & svtVector<Vtype>::operator=(const svtVector<Vtype> &R) { if(n != R.n) { n = R.n; if(*ref_count == 1) if(r) delete [] r; r = new Vtype [n]; } for(int i = 0; i < n; ++i) r[i] = R.r[i]; T = R.T; return *this; }
и
template <class Vtype> svtVector<Vtype> & svtVector<Vtype>::operator=(const Vtype &a) { for(int i = 0; i < n; ++i) r[i] = a; return *this; }
но почему-то первый из них наследуется а второй неявным образом вызывает конструктор (который с одним аргументом типа int) Это я зажал используя explicit И второе когда я пытаюсь компилить след код
#include "svtRVector.h"
int main() { svtRVector r1(5); svtRVector r2(5); svtRVector r3;
r1.Random(); r2.Random(); r1.PrintSelf();
r3 = r1+r2; r3.PrintSelf(); return 0; }
Получаю следующее собщение компилятора main.cc: In function `int main()': main.cc:12: no match for `svtRVector& = svtVector<double>' operator svtRVector.h:27: candidates are: svtRVector& svtRVector::operator=(double) svtRVector.h:19: svtRVector& svtRVector::operator=(const svtRVector&)
Помогите разобраться а то я где-то зациклил. Заранее спасибо.