【发布时间】:2024-01-19 08:06:01
【问题描述】:
假设我有一个类“myclass”-:
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...
}
但是当我这样做时,我得到以下错误-:
在函数“int main()”中:
|47|错误:没有匹配函数调用“myclass::myclass(myclass)”
|47|注意:候选人是:
|36|注意:myclass::myclass(myclass&)
|36|注意:没有已知的参数 1 从“myclass”到“myclass&”的转换
|32|注意:myclass::myclass(int)
|32|注意:没有已知的参数 1 从“myclass”到“int”的转换
但是当我从类中删除复制构造函数 myclass(myclass &a) 时,我没有收到任何错误并且一切正常......
所以现在我的问题是-:
1)。为什么会这样?? myclass(int n=0) 不是比这里的复制构造函数更好匹配吗??
2)。考虑到我想要复制构造函数和我的类中的整数构造函数,如何成功编译它??
注意:我在 Ubuntu 13.04 上使用 GCC 版本 4.7.3(如果有任何相关性。)
【问题讨论】:
-
复制构造函数不应该采用
const myclass& a吗? -
@nvoigt 两者都是合法的,并且在极少数情况下(如
std::auto_ptr)复制构造函数确实采用非常量引用。但通常:您希望能够复制临时对象(这需要 const ref),并且您不修改正在复制的对象(因此您可以使用 const ref)。
标签: c++ arrays constructor copy-constructor constructor-overloading