我收到了警告:初始化从整数中生成指针而没有C中的强制转换。什么是强制转换?我该怎么办?
void UpdateElement(Console* console)
{
DynamicVector* CostList=getAllCosts(console->ctrl);
int i,n;
printf("Give the position of the element you want to delete:");
scanf("%d",&n);
for(i=n-1;i<getLen(CostList);i++)
{
Cost* c=(Cost*)getElementAtPosition(CostList,i);
Cost* c2=AddCost(console); **//here I get the warning**
update_an_element(console->ctrl,c,c2,i);
}
}
Console* initConsole(Controller* ctrl)
{
Console* console=(Console*)malloc(sizeof(Console));
console->ctrl=ctrl;
return console;
}
int createCost(Controller* ctrl, char* day, char* type, int sum)
{
Cost* c=initCost(day,type,sum);
save(ctrl->repo,c);
return c; **//now here I get the warning**
}
答案 0 :(得分:1)
我相信:
AddCost(console);
返回一个整数,然后将其转换为指针(警告说的内容)。
答案 1 :(得分:1)
c
的类型为Cost*
,函数createCost
返回int
。两者都不兼容,这就是为什么编译器抱怨丢失演员表,但你不想在这种情况下施放。
将该函数的返回类型更改为Cost*
答案 2 :(得分:1)
C / C ++假定返回类型是一个整数,除非由标题或它的声明指定。您可能调用了一个未在程序中预先声明的函数,但没有标题。它假设它是一个int并给你一个错误。
答案 3 :(得分:0)
您可能需要使用
Cost* c2=(Cost*)AddCost(console);
但它可能不安全,因为AddCost(...)正在返回另一种类型。
关于功能
int createCost(Controller* ctrl, char* day, char* type, int sum)
应该声明为
Cost* createCost(Controller* ctrl, char* day, char* type, int sum)
为什么声明为int?