1

1d、2d、および 3d 配列を作成する Array クラスを作成しましたが、すべてのテストで正常に動作します: 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 クラスには 3 つのコンストラクターがあり、それぞれ 1 つ、2 つ、3 つの int を取ります。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 に答える