[英]Argument of type “const char **” is incompatible with parameter of type “const 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.