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

Argument of type "const char*" is incompatible with parameter of type "char*". But why? :(

本文关键字:参数 类型 char 为什么 const 不兼容      更新时间:2023-10-16

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

#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"传递给将char*作为参数的函数。在C++中,与 C 相反,字符串文字将衰减到类型 const char* 的指针,所以这只是类型不匹配。

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

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

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