2

警告が表示されます: 初期化により、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

4 に答える 4

1

C/C++ は、ヘッダーまたはその宣言で指定されていない限り、戻り値の型が整数であると想定します。プログラムで事前に宣言されておらず、ヘッダーを持たない関数を呼び出した可能性があります。それは int であると想定し、エラーを出しました。

于 2013-12-08T23:31:16.907 に答える
1

私は信じている:

AddCost(console);

その後、ポインターにキャストされる整数を返します(警告が言ったこと)。

于 2013-03-17T18:59:49.903 に答える
1

cは型Cost*で、関数は をcreateCost返しますint。どちらも互換性がないため、コンパイラはキャストの欠落について不平を言いますが、この場合はキャストしたくありません。

その関数の戻り値の型を次のように変更しますCost*

于 2013-03-17T19:00:44.863 に答える
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 として宣言されているのですか?

于 2013-03-17T18:56:16.617 に答える