gpt4 book ai didi

c++ - "const char*"类型的参数与 "char*"类型的参数不兼容。但为什么? :(

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:38:35 26 4
gpt4 key购买 nike

我正在学习一些数据结构的东西,我遇到了一个我什至没有预料到的问题,因为通常我可以解决这种错误。

#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”无法正常工作。

最佳答案

您正在将字符串文字 "Ionescu" 传递给以 char* 作为参数的函数。在 C++ 中,与 C 不同,字符串字面量会衰减为 const char* 类型的指针,因此这只是类型不匹配。

为了克服这个问题,我建议将您的函数更改为采用 const char*,因为您实际上并没有修改正文中传递的参数的内容:

Avion creareAvion(const char* numePilot, int nrPasageri) {
...

并且:如果您使用的是 C++,请切换到 C++ 的隐喻(并摆脱 C 的隐喻);例如,C++ 提供了 std::string,它避免了在处理 malloc/free ... 以及可复制/可移动对象时可能发生的许多错误。

关于c++ - "const char*"类型的参数与 "char*"类型的参数不兼容。但为什么? :(,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56500403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com