1

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

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

4

3 回答 3

2

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

于 2013-11-07T20:39:54.853 回答
2

问题是你在 StaggeredGrid 的构造函数中声明并且不初始化

    Array p_;

应该调用默认构造函数,您的代码中似乎缺少该构造函数。

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

    class Array
    {
    public:
        Array(){}
        // ...
    };
于 2013-11-07T20:39:59.620 回答
0

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

在您的情况下,您已经定义了参数化构造函数“ Array(int xSize, int ySize) ”,但是您正在使用默认构造函数创建一个类,即Array p_。这会调用您的编译器未完全找到的默认构造函数。

解决方案:

在Array类中引入默认构造函数

于 2014-11-09T17:39:56.413 回答