【问题标题】:error: no known conversion from 'foo1*' to 'const foo2&'错误:没有从 'foo1*' 到 'const foo2&' 的已知转换
【发布时间】: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&lt;foo2*&gt;(a),这里是documentation
  • @UnholySheep 它不起作用,错误:undefined reference to foo2::foo2(foo2 const&)`。我的代码是这样的foo1* b = new foo2(*dynamic_cast&lt;foo2*&gt;(a));,如果我输入错误,请纠正我
  • 不,这是正确的——它可以编译,但是你得到一个链接器错误,因为你实际上并没有定义一个复制构造函数——你只是声明了它。您实际上需要为它编写一个定义才能链接
  • @UnholySheep 我明白了,谢谢你的帮助!!

标签: c++ polymorphism constants copy-constructor


【解决方案1】:

您的复制构造函数需要引用(地址)并且您试图传递一个指针。所以你想创建实际的对象而不是指针或引用指针

【讨论】:

    猜你喜欢
    • 2020-06-08
    • 2022-07-29
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    相关资源
    最近更新 更多