我正在学习一些数据结构方面的知识,并且遇到了一个我什至没有想到的问题,因为通常我可以解决这种错误。
#include <iostream>
using namespace std;
struct Avion {
char* numePilot;
int nrPasageri;
};
struct nodDublu {
Avion info;
nodDublu* next;
nodDublu* prev;
};
struct ListaDubla {
nodDublu* first;
nodDublu* last;
};
Avion creareAvion(char* numePilot, int nrPasageri) {
Avion avion;
avion.numePilot = (char*)malloc(sizeof(char)*(strlen(numePilot) + 1));
strcpy_s(avion.numePilot, strlen(numePilot) + 1, numePilot);
avion.nrPasageri = nrPasageri;
return avion;
}
nodDublu* creareNod(Avion info, nodDublu* next, nodDublu* prev) {
nodDublu* nou = (nodDublu*)malloc(sizeof(nodDublu));
nou->info = creareAvion(info.numePilot, info.nrPasageri);
nou->next = next;
nou->prev = prev;
return nou;
}
ListaDubla inserareInceput(ListaDubla lista, Avion avion) {
nodDublu* nou = creareNod(avion, lista.first, NULL);
if (lista.first) {
lista.first->prev = nou;
lista.first = nou;
return lista;
}
else {
lista.first = nou;
lista.last = nou;
return lista;
}
}
void main() {
ListaDubla lista;
lista.first = NULL;
lista.last = NULL;
Avion avion = creareAvion("Ionescu", 34);
}
我将整个代码放在这里,但是可以避免的是,问题出在“ creareAvion”上,我猜这是创建Avion的功能。由于该错误,“ Ionescu”无法正常工作。
答案 0 :(得分:0)
您正在将字符串文字"Ionescu"
传递给一个以char*
作为参数的函数。与C相比,在C ++中,字符串文字将衰减为const char*
类型的指针,因此这只是类型不匹配。
为克服此问题,我建议将函数更改为const char*
,因为您实际上并不修改主体中传递的参数的内容:
Avion creareAvion(const char* numePilot, int nrPasageri) {
...
并且:如果您使用的是C ++,请切换到C ++的隐喻(并摆脱C的隐喻);例如,C ++提供了std::string
,它避免了在处理malloc / free ...与可复制/移动对象一起使用时可能发生的许多错误。