很抱歉,如果我仍然问这个问题,但是如果我做了一个小例子,我已经给出了解决方案,如果我尝试在我的项目中实现它,我会继续在标题中收到错误。
这是我的结构
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]
答案 0 :(得分:3)
在模板类element
中,您存储了T
类型的实例。创建element<T>
实例后,val
将默认构建。
当您使用point
作为T
时,您将收到错误,因为它没有默认构造函数。