pp[j1] = malloc(sizeof(Undergraduate)); cin>>other; b = Undergraduate(Name,Age,other); Undergraduate *pb = (Undergraduate *)pp[j1]; *pb = b; ptypes[j1] = "Undergraduate"; 关于此代码片段,*pb = b处出错原因及修改方法
时间: 2024-03-03 10:51:54 浏览: 11
这段代码的问题在于赋值运算符不能直接用于类,需要使用类的复制构造函数或者重载赋值运算符。因此,正确的做法是在Undergraduate类中添加一个复制构造函数或者重载赋值运算符。
修改后的代码如下所示:
```
pp[j1] = malloc(sizeof(Undergraduate));
cin >> other;
Undergraduate b(Name, Age, other);
Undergraduate *pb = (Undergraduate *)pp[j1];
*pb = b; // 或者使用 pb = new Undergraduate(b);
ptypes[j1] = "Undergraduate";
```
其中,`Undergraduate`类中添加复制构造函数的示例代码如下:
```
Undergraduate(const Undergraduate& other) {
this->Name = other.Name;
this->Age = other.Age;
this->other = other.other;
}
```
或者添加重载赋值运算符的示例代码如下:
```
Undergraduate& operator=(const Undergraduate& other) {
this->Name = other.Name;
this->Age = other.Age;
this->other = other.other;
return *this;
}
```
这样就可以正确地将对象赋值给指针了。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)