在另一个构造函数中调用构造函数(没有匹配函数来调用...)c ++

时间:2013-11-07 20:34:00

标签: c++ arrays constructor

我已经编写了一个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)

如果有人知道这个问题,我将不胜感激

3 个答案:

答案 0 :(得分:2)

您的Array类有三个构造函数,分别取一个,两个和三个整数。如果StaggeringGrid有一个默认的构造函数,它将调用你所说的不存在的Array :: Array()。

答案 1 :(得分:2)

那就是你在StaggeredGrid的构造函数中声明并且不进行初始化

    Array p_;

应该调用默认构造函数,这似乎在代码中缺失。

简单地添加空的默认构造函数应该可以解决问题。

    class Array
    {
    public:
        Array(){}
        // ...
    };

答案 2 :(得分:0)

在类中定义任何构造函数后,编译器不会为您的类隐式定义默认构造函数。

在您的情况下,您已经定义了参数化构造函数" 数组(int xSize,int ySize)"但是你正在使用默认构造函数创建一个类,即数组p _ 。这会调用您的默认构造函数,而编译器并不完全找到它。

<强>解决方案:

数组

中引入默认构造函数