簡體   English   中英

類型“ const char *”的參數與類型“ char *”的參數不兼容。 但為什么? :(

[英]Argument of type “const char*” is incompatible with parameter of type “char*”. But why? :(

我正在學習一些數據結構方面的東西,並且遇到了一個我什至沒有想到的問題,因為通常我可以解決這種錯誤。

#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"傳遞"Ionescu" char*作為參數的函數。 與C相反,在C ++中,字符串文字將衰減為const char*類型的指針,因此這只是類型不匹配。

為了克服這個問題,我建議您將函數更改為const char* ,因為您實際上並不修改主體中傳遞的參數的內容:

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

並且:如果您使用的是C ++,請切換到C ++的隱喻(並擺脫C的隱喻); 例如,C ++提供了std::string ,它避免了在處理malloc / free ...以及可復制/移動對象時可能發生的許多錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM