【问题标题】:How to fix main function calling the incorrect function when passing parameters? (c++)传递参数时如何修复主函数调用不正确的函数? (c++)
【发布时间】:2019-04-16 02:52:00
【问题描述】:

我的 CS 类有一个项目,我编写了一个复制构造函数并将该类的一个对象传递给它,但主要调用了错误的构造函数。

主要:

Mammal x;
cout << "Initial values for x: ";
cout << "Age = " << x.getAge() << " Weight = " << x.getWeight() << endl;
x.setAge(10);
x.setWeight(123);
cout << "Modified values for x: ";
cout << "Age = " << x.getAge() << " Weight = " << x.getWeight() << endl;
Mammal w(&x);
cout << "\nModified values for w: ";
cout << "Age = " << w.getAge() << " Weight = " << w.getWeight() << endl;
w.sound();

复制构造函数:

Mammal(Mammal &x)
{
    this->canSwim = x.canSwim;
}

main 调用的函数:

 Mammal(bool x)
{
    canSwim = x;
}

我希望输出复制这些值,但它从默认构造函数中将年龄和体重的值设置为 0。

【问题讨论】:

  • 隐含的boolconversion 正在进行。您的复制构造函数可以将其他 Mammal 作为 const 引用使用 Mammal(const Mammal&amp;) 代替。您通过引用将对象传递给复制构造函数,调用Mammal w(x),而不是Mammal w(&amp;x)

标签: c++ inheritance copy-constructor


【解决方案1】:

当你通过引用传递时,你不会使用&amp;来获取某个东西的地址。

尝试以下方法:

Mammal w(x);

另外,我建议使用编译标志 -Wall -Wextra,因为它们可能会提醒您注意这个问题。

【讨论】:

    【解决方案2】:

    您的复制构造函数仅复制 canSwim 属性。 您必须明确说明要复制哪些属性:

    Mammal(Mammal &x)
    {
        this->canSwim = x.canSwim;
        this->age = x.age;
        this->weight = x.weight;
        ...
    }
    

    正如@Jeffrey Cash 所指出的,您应该从构造函数调用中删除“&”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-14
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多