簡體   English   中英

在另一個構造函數中調用構造函數(沒有匹配函數來調用...)c ++

[英]Call constructor inside another constructor (no matching function to call…) c++

我編寫了一個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)

如果有人知道這個問題,我將不勝感激

您的Array類有三個構造函數,分別取一個,兩個和三個整數。 如果StaggeringGrid有一個默認構造函數,它將從你所說的內容中調用不存在的Array :: Array()。

那就是你在StaggeredGrid的構造函數中聲明並且不進行初始化

    Array p_;

應調用默認構造函數,這似乎在代碼中缺失。

簡單添加空的默認構造函數應該可以解決問題。

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

一旦在類中定義了任何構造函數,編譯器就不會為您的類隱式定義默認構造函數。

在您的情況下,您已經定義了參數化構造函數“ Array(int xSize,int ySize) ”,但您正在創建一個具有默認構造函數的類,即Array p_ 這會調用您的默認構造函數,而編譯器並不完全找到它。

解:

Array類中引入默認構造函數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM