我有以下c ++代码:
class test1{};
class test2{ test2();};
class test3{ test3(int); };
test1 t1(test1()); //compile ok
test1 t2(test2()); //compile ok
test1 t3(test3(int())); //compile ok
test1 t4(test3(10));
//compile error: no known conversion for argument 1 from 'test3' to 'const test1&'
为什么?
答案 0 :(得分:2)
你说编译好吧实际上并没有做你想要的,它声明了一个函数,它没有定义一个变量。这是Borgleader所指的“最令人烦恼的解析”或MVP。
尝试使用以下内容进行编译,这实际上是您的意思,您将看到它失败:
test1 t2( (test2()) );
您需要定义这些复制构造函数才能使用它们。 test2不是从test1派生的,因此它不能使用继承,也没有为你修复它的神奇类型转换。