[英]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.