l4行错误,不应该把dog改为小黑吗


class Dog {

public:

string name;

};

 

class Person {

public:

void play(Dog f) {//L1行

cout << f.name << endl;//L2行

};

};

 

int main() {

Person *per = new Person();

Dog *dog = new Dog();

dog->name = "小黑";//L3行

per->play(dog);//L4行

return 0;

}

主函数里,dog 是Dog类的指针类型, 后面你要这样调用:

per->play(*dog);

是的,因为在L4行中调用的是play()函数,并使用了dog作为参数传递给它。而在定义的类中,play()函数需要接收一个Dog类型的参数,因此应该将L3行修改为dog->name = "小黑"。最后的代码应该如下所示:


class Dog {
public:
    string name;
};

class Person {
public:
    void play(Dog f) {   //L1行
        cout << f.name << endl;  //L2行
    };
};

int main() {
    Person *per = new Person();
    Dog *dog = new Dog();
    dog->name = "小黑";   //L3行 (修改为dog->name = "小黑")
    per->play(*dog);      //L4行 (修改为per->play(*dog))
    return 0;
}


这里需要注意的是,在L4行中,需要将dog作为指针传递给类函数play(),因此需要解引用dog指针,即使用 *dog 来获取dog对象本身。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    抱歉,您没有提出明确的问题。请提供更具体的信息。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^