我想创建一个模板类,并且当我定义一个非成员模板函数时,我得到“没有匹配函数调用randvec()”的错误。模板问题:没有匹配函数调用
我有一个模板类定义为:
template <class T>
class Vector {
T x, y, z;
public:
//constructors
Vector();
Vector(const T& x, const T& y, const T& z);
Vector(const Vector& u);
//accessors
T getx() const;
T gety() const;
T getz() const;
//mutators
void setx(const T& x);
void sety(const T& y);
void setz(const T& z);
//operations
void operator-();
Vector plus(const Vector& v);
Vector minus(const Vector& v);
Vector cross(const Vector& v);
T dot(const Vector& v);
void times(const T& s);
T length() const;
//Vector<T>& randvec();
//operators
Vector& operator=(const Vector& rhs);
friend std::ostream& operator<< <T>(std::ostream&, const Vector<T>&);
};
,问题中的函数,我上面所有这些功能后定义是:
//random Vector
template <class T>
Vector<double>& randvec()
{
const int min=-10, max=10;
Vector<double>* r = new Vector<double>;
int randx, randy, randz, temp;
const int bucket_size = RAND_MAX/(max-min +1);
temp = rand(); //voodoo hackery
do randx = (rand()/bucket_size)+min;
while (randx < min || randx > max);
r->setx(randx);
do randy = (rand()/bucket_size)+min;
while (randy < min || randy > max);
r->sety(randy);
do randz = (rand()/bucket_size)+min;
while (randz < min || randz > max);
r->setz(randz);
return *r;
}
然而,每次我在我的主要功能使用如下行:
Vector<double> a(randvec());
我得到该错误。但是,如果我删除模板并使用'double'而不是'T'来定义它,那么对randvec()的调用完全可以工作。为什么它不识别randvec()?
P.S.不要介意标签为巫毒hackery的位 - 这只是一个便宜的黑客,所以我可以绕过另一个problem I encountered。
太棒了。这解决了它! – 2010-06-15 00:12:47
@尼克甜心:*什么*完全解决它?你是否让你的'randvec'非模板?还是你在'<>'中指定了某种类型? – AnT 2010-06-15 00:14:36
我在<>中指定了一个类型,如: vector a(randvec ()); 是的,我意识到有一个内存泄漏 - 我会考虑找到一个修复 - 任何建议? –
2010-06-15 01:37:46