假设我有一类“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)。 –