我已经编写了一个Array类来创建1d,2d和3d数组,并且它适用于每个测试:2d情况下数组类的构造函数的示例:
Array::Array( int xSize, int ySize )
{
xSize_ = xSize;
ySize_ = ySize;
zSize_ = 1;
vec.resize(xSize*ySize);
}
它工作正常,但是当我需要在其他构造函数中使用此构造函数时,我得到"没有匹配的函数错误" , 我的代码的一部分:
class StaggeredGrid
{
public:
StaggeredGrid ( int xSize1, int ySize1, real dx, real dy ) : p_ (2,2) {}
protected:
Array p_;
完成错误:
No matching function for call to Array::Array()
Candidates are : Array::Array(int)
Array::Array(int, int)
Array::Array(int, int, int)
如果有人知道这个问题,我将不胜感激
答案 0 :(得分:2)
您的Array类有三个构造函数,分别取一个,两个和三个整数。如果StaggeringGrid有一个默认的构造函数,它将调用你所说的不存在的Array :: Array()。
答案 1 :(得分:2)
那就是你在StaggeredGrid的构造函数中声明并且不进行初始化
Array p_;
应该调用默认构造函数,这似乎在代码中缺失。
简单地添加空的默认构造函数应该可以解决问题。
class Array
{
public:
Array(){}
// ...
};
答案 2 :(得分:0)
在类中定义任何构造函数后,编译器不会为您的类隐式定义默认构造函数。
在您的情况下,您已经定义了参数化构造函数" 数组(int xSize,int ySize)"但是你正在使用默认构造函数创建一个类,即数组p _ 。这会调用您的默认构造函数,而编译器并不完全找到它。
<强>解决方案:强>
在数组类
中引入默认构造函数