Heres the link to code and the error
我不明白为什么行return (const C&)cc;
无效。
下载了一段代码和错误
#include <stdio.h>
class C
{
public:
int i;
explicit C(const C&) // an explicit copy constructor
{
printf("\nin the copy constructor");
}
explicit C(int i ) // an explicit constructor
{
printf("\nin the constructor");
}
C()
{
i = 0;
}
};
class C2
{
public:
int i;
explicit C2(int i ) // an explicit constructor
{
}
};
C f(C c)
{ // C2558
// c.i = 2;
// return c; // first call to copy constructor
C cc;
return (const C&)cc;
}
void f2(C2)
{
}
void g(int i)
{
// f2(i); // C2558
// try the following line instead
f2(C2(i));
}
int main()
{
C c, d;
d = f(c); // c is copied
}
输出:
在函数'C f(C)'中:第36行:错误: 没有匹配的呼叫功能 'C :: C(const C&amp;)'编译 由于-Wfatal-errors而被终止。
答案 0 :(得分:2)
第36行需要复制构造函数的隐式调用,由于某种原因,您已声明了该构造函数。
删除副本上的显式,你会没事的。
将它放在C::C(int)
上是有意义的。
答案 1 :(得分:1)
调用显式复制构造函数的示例:
当然,按值传递和按值返回总是隐式调用复制构造函数,因此明确声明复制构造函数会阻止这种情况(不一定是坏事)。
答案 2 :(得分:0)
尝试:
return C(cc);
这是对复制构造函数的显式调用。铸造参考不是。