警告:初始化使得整数指针不带C中的强制转换

时间:2013-03-17 18:53:42

标签: c

我收到了警告:初始化从整数中生成指针而没有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**

}

4 个答案:

答案 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?