没有匹配的构造函数用于初始化' point'

时间:2017-02-09 12:13:41

标签: c++ class templates struct constructor

很抱歉,如果我仍然问这个问题,但是如果我做了一个小例子,我已经给出了解决方案,如果我尝试在我的项目中实现它,我会继续在标题中收到错误。
这是我的结构

template<typename T>
struct element{
   int i;  
   int j;  
   T val;  

   element(){}
   element(T &other): val(other){} // this is the solution i previously got

   template<typename U>
   element(const element<U>& e): val(static_cast<T>(e.val)), i(e.i), j(e.j){}
   // this one is used to help the main class cast types.
};

在我的sparseMatrix类中,我创建了一个类型为element的动态数组

element<T> *m; // the class is also template

基本数据类型一切正常 我需要做的是使我的动态数组由elements组成,使用自定义数据类型 我一直在做的测试是结构点

struct point {
   int x; 
   int y; 

   point(int xx, int yy) : x(xx), y(yy) {}
};

我在类中实现的构造函数是

explicit sparseMatrix(const T& d) : mat(0), capacity(0), n(0), def_value(d) {
    m = new element<T> [capacity];
}

当我在主要的时候

sparseMatrix<point> mcp(point(1, 2));

我收到错误no matching constructor for initialization of 'point' 我做错了什么?
我该如何解决这个问题呢? [注意,我不能使用c ++ 11]

1 个答案:

答案 0 :(得分:3)

在模板类element中,您存储了T类型的实例。创建element<T>实例后,val默认构建

当您使用point作为T时,您将收到错误,因为它没有默认构造函数。