【发布时间】:2017-05-29 22:44:30
【问题描述】:
我可以知道如何处理main() 中的参数a 以便调用复制构造函数吗?
class foo1 {
public:
virtual void display() = 0;
};
class foo2 : public foo1
{
public:
foo2();
foo2(const foo2& a);
void display()
{
cout << "Copy constructor works\n";
}
};
int main()
{
foo1* a = new foo2;
foo1* b = new foo2(a);
}
谢谢大家帮忙
【问题讨论】:
-
我试过了,但我遇到了另一个错误:没有从 'foo1' 到 'const foo2&' 的已知转换
-
向下转换需要明确 - 试试
*dynamic_cast<foo2*>(a),这里是documentation -
@UnholySheep 它不起作用,错误:
undefined reference tofoo2::foo2(foo2 const&)`。我的代码是这样的foo1* b = new foo2(*dynamic_cast<foo2*>(a));,如果我输入错误,请纠正我 -
不,这是正确的——它可以编译,但是你得到一个链接器错误,因为你实际上并没有定义一个复制构造函数——你只是声明了它。您实际上需要为它编写一个定义才能链接
-
@UnholySheep 我明白了,谢谢你的帮助!!
标签: c++ polymorphism constants copy-constructor