no matching function for call to 'Person::Person(Person*)'
时间: 2023-06-20 09:03:29 浏览: 281
这个错误通常是因为你在创建 `Person` 对象时,传入了一个指向 `Person` 类型的指针,而 `Person` 类并没有一个接受指针参数的构造函数。
你可以尝试修改代码,将传入指针的部分改为传入对象本身,例如:
```
Person person1; // 创建一个 Person 对象
Person person2(&person1); // 错误:没有接受指针参数的构造函数
Person person3(person1); // 正确:使用拷贝构造函数
```
如果你需要使用指针,可以在 `Person` 类中添加一个接受指针参数的构造函数,例如:
```
class Person {
public:
Person() {}
Person(Person* p) {
// 使用指针 p 进行初始化
}
};
```
注意,在使用指针进行初始化时,需要注意指针是否为 `null`,以及需要进行合适的内存管理,避免引发内存泄漏等问题。
相关问题
no matching function for call to 'Person::Person(std::string&, char&)'
这个错误信息的意思是在你的代码中,Person类的构造函数没有匹配到你所调用的参数类型。
通常情况下这个错误是因为你在调用Person类的构造函数时传入的参数类型和构造函数定义的参数类型不一致。你需要检查一下你的代码,看看是否有以下几种问题:
1. 构造函数的参数列表和调用时传入的参数列表不一致。
2. 构造函数的参数类型和调用时传入的参数类型不匹配。
3. 构造函数的参数数量和调用时传入的参数数量不一致。
你需要逐一检查这些问题,并且修正你的代码,使得构造函数的参数类型和调用时传入的参数类型一致。
class Graduate:virtual public Teacher,virtual public Student { public: Graduate(char*na,int ag,char c,char*d,int s,char*cl,char*id) :Teacher(na,ag,c,d,s),Student(na,ag,c,cl,id) { } void showMe(){ Student::showMe(); Person::showMe(); Teacher::showMe(); } };74 45 C:\Users\王淑婧\Desktop\c.6_5.cpp [Error] no matching function for call to 'Person::Person()'
这段代码中,Graduate类继承了Teacher和Student类,并且在构造函数中调用了它们的构造函数来进行初始化。但是,由于Person类中没有默认构造函数,所以在Graduate类中调用Person类的构造函数时会出现错误。
解决方法是在Person类中添加一个默认构造函数,或者在Graduate类的构造函数中显式地调用Person类的构造函数来进行初始化。例如:
```c++
class Graduate : virtual public Teacher, virtual public Student {
public:
Graduate(char* na, int ag, char c, char* d, int s, char* cl, char* id)
: Person(na, ag, c), Teacher(na, ag, c, d, s), Student(na, ag, c, cl, id) {
}
void showMe() {
Student::showMe();
Person::showMe();
Teacher::showMe();
}
};
```
阅读全文