0
我正在考虑如何传递我的智能指针。将unique_ptr传递给非成员函数
我呼吁我的矩阵对象小时功能isIdentity
:
void test(const size_t dim)
{
cout << "identity gen: " << "\t\t" << ((h.isIdentity())?"true":"false") << endl;
}
这里是我的矩阵类的相关功能。 它有一个名为isIdentity
的成员函数和一个名为m的包含实际矩阵的私有数组。
template <typename T>
class Matrix
{
private:
size_t dim;
unique_ptr<T[]> m;
public:
explicit Matrix(size_t dim) : dim(dim), m(new T[dim*dim]())
{
m = gen_mat<T>(dim); //generates random matrix
}
Matrix(T* m, size_t dim): dim(dim), m(m){} //copy constructor
~Matrix(){
};
bool isIdentity()
{
return check_identity<T>(this->m,dim);
}
}
成员函数调用此非成员函数。
template <typename T>
bool check_identity(const T *m, size_t dim)
{
for(size_t i = 0; i < dim; ++i)
{
for(size_t j = 0; j < dim; ++j)
{
T r = i == j ? m[i*dim+j] - 1.0 : m[i*dim+j];
if (r < -PRECISION || r > PRECISION)
{
return false;
}
}
}
return true;
}
问:
出于某种原因,check_identity功能无法识别。我非常不确定我的方法是否是正确的方法。有人可以向我解释什么是错的,并给出一些关于如何正确使用的指导方针?
如果需要其他信息,请发表评论。
错误消息:
error: no matching function for call to ‘check_identity(std::unique_ptr<double [], std::default_delete<double []> >&, size_t&)’
它很简单,它几乎伤害。谢谢 ;) –