假設我有一類「MyClass的」 - :C++:與重載構造一個類對象的陣列
class myclass
{
public:
int n;
myclass(int n=0)
{
this->n=n;
}
myclass(myclass &a)
{
this->n=a.n;
}
~myclass()
{
cout<<n<<"\n";
}
};
現在我想創建「MyClass的」的對象的數組如下 - :
int main()
{
myclass arr[]= {5}; // Only 1 element for simplicity...
}
但是,當我這樣做,我碰到下面的錯誤 - :
在函數 '廉政的main()':
| 47 |錯誤:沒有匹配的福nction呼叫爲 'MyClass的MyClass的::(MyClass的)'
| 47 |注:考生:
| 36 |注:MyClass的MyClass的::(MyClass的&)
| 36 |注:沒有已知的參數轉換1從 'MyClass的' 到 'MyClass的&'
| 32 |註釋:MyClass的:: MyClass的(INT)
| 32 |注:沒有已知的轉換用於從 'MyClass的' 到 'INT'
參數1但是,當我從類刪除複製構造函數myclass(myclass &a)
,我沒有得到任何錯誤,一切工作正常...
所以現在我的問題是 - :
1)。這是爲什麼發生?是否myclass(int n=0)
比複製構造函數更好匹配?
2)。如何成功編譯它,考慮到我希望這兩個,複製構造函數以及我的類中的整數構造函數?
注:我使用的GCC 4.7.3版本在Ubuntu 13.04
複製構造函數不應該使用'const myclass&a'? – nvoigt
@nvoigt兩者都是合法的,並且在極少數情況下(比如'std :: auto_ptr'),拷貝構造函數確實帶有一個非const引用。但通常情況下:您希望能夠複製臨時對象(這需要一個const ref),並且不要修改正在複製的對象(因此您可以使用const ref)。 –