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

时间:2019-06-07 19:44:13

标签: c++

我正在学习一些数据结构方面的知识,并且遇到了一个我什至没有想到的问题,因为通常我可以解决这种错误。

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

1 个答案:

答案 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 ...与可复制/移动对象一起使用时可能发生的许多错误。