C++ 没有匹配的构造函数用于初始化';点';

C++ 没有匹配的构造函数用于初始化';点';,c++,class,templates,struct,constructor,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 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.
};
我在类中实现的构造函数是

explicit sparseMatrix(const T& d) : mat(0), capacity(0), n(0), def_value(d) {
    m = new element<T> [capacity];
}
explicit sparseMatrix(常量T&d):mat(0)、capacity(0)、n(0)、def_值(d){
m=新元素[容量];
}
基本上我是这样做的

sparseMatrix<point> mcp(point(1, 2));
sparseMatrix mcp(第(1,2)点);
我得到错误
没有匹配的构造函数来初始化'point'
我做错了什么?
如何解决此问题?

[注意,我不能在template类
元素中使用c++11]

存储类型
t
的实例。当创建
元素
实例时,将默认构造
val


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

在一个不相关的注释中,您确定要指向
元素的指针而不是
std::vector
?使用向量,您不必自己处理重新分配。此外,在显示的
sparseMatrix
构造函数中,您将
容量
初始化为零,并将其用于分配的数据大小。你确定这是个好主意吗?我必须这么做,因为我的项目不允许我使用stl容器。每次将一个元素添加到矩阵中时,容量都是increased@user7337963对按照您设计稀疏矩阵的方式,它需要包含的类型具有默认构造函数。您介意给我一个小示例吗?因为这是我从未来过的across@user7337963你的问题基本上是沸沸扬扬的。解决了这个问题,你就基本上理解了给出的答案。@PaulMcKenzie我为你给我的“解决问题练习”找到的解决方案我想出了foo**p=new foo*[10]如果我错了,请纠正我。试图实现我的编译器建议:mat=*new val_type*[capacity];这对我来说很糟糕,但它起作用了。是否正确?@user7337963
mat=*new val\u type*[capacity]
将泄漏内存。除此之外,分配指针数组可能是一种解决方案。或者只是记录默认构造的要求。
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));