类型 "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"
传递给将char*
作为参数的函数。在C++中,与 C 相反,字符串文字将衰减到类型 const char*
的指针,所以这只是类型不匹配。
为了克服这个问题,我建议更改您的函数以采用const char*
,因为您实际上不会修改正文中传递的参数的内容:
Avion creareAvion(const char* numePilot, int nrPasageri) {
...
并且:如果您正在使用C++,请切换到C++的隐喻(并摆脱C的隐喻(;例如,C++提供了std::string
,它避免了在处理malloc/free时可能发生的许多错误...与可复制/可移动对象结合使用。
相关文章:
- 扩展C++生成的代码的模板参数类型名称
- 如何在 c++ 中定义接受不同参数类型的函数向量?
- 在 C++ 中运行时调用模板时,是否可以切换模板的参数类型?
- 将函数参数类型声明为 auto
- 将函数的参数 - 签名从使用 'std::function<T>' 转换为模板参数类型
- 在 C++17 中调用具有不同参数类型的构造函数
- 具有先前参数类型匹配的参数包
- 我想知道为什么"std::unique_ptr<int> foo(新 int)"是合法的,因为"std::<int>unique_ptr"要求输入参数类型应该是"int"?
- 将可变参数类型列表的扩展打包为复杂类型的初始值设定项列表 - 合法吗?
- MSVC 错误:4 个重载中的任何一个都无法转换所有参数类型
- 使用constexpr + auto作为返回和参数类型的奇怪类型推导
- 如何从第一个参数推断第二个参数类型?
- C++模板函数中,指定回调函子/lambda 的参数类型,同时仍允许内联?
- 如何用不同的参数类型和数字回调函数
- C++stoi:这两个重载都无法转换所有参数类型
- 为什么std::{container}::template不能推导其参数类型
- 为模板参数类型中的新对象分配内存
- 为指向成员模板参数的指针推导额外模板参数类型的紧凑方式
- 使用std::conditional中的模板来确定函数参数类型
- C++中的短参数类型