设置Struct等于返回相同结构的函数

时间:2012-02-08 06:49:18

标签: c struct variable-assignment

所以我在项目的最后一步,我必须从函数返回一个结构,所以我可以在main中使用它。 可以看到相关代码:

typedef struct SomeProduct {
    int itemNum;
    char itemName[21];
    double unitPrice;
    int stockQty;
    int restockQty;
    struct SomeProduct *next;
} SProduct;

 struct llpro {

 SProduct data;
 struct llpro *next;
 };

////////////////////SKIP LINES to identifier

SProduct findItem(struct llpro *head,int num);

///////////////////SKIP LINES to assignment that fails. head is the proper
////////////////// pointeritemspurchased is an int.

SProduct steve;
steve=findItem(head,newv.itemsPurchased[y]);

//////////////////Skip Lines to method

SProduct findItem(struct llpro *head,int num)
{
    while(head!=NULL)
    {
       if(head->data.itemNum==num)
       {
         SProduct paul;
         paul=head->data;
         return paul;
       }
    }
}

无论何时我尝试编译它,我都会收到链接器错误,说它们从未被定义过。然后当我取出标识符时,我收到一条消息,说steve和paul是不兼容的类型,即使它们都是SProducts。请帮忙! 我还想澄清一下,我想要做的是搜索Sproducts的链接列表,并从与我搜索的项目编号共享项目编号的信息中提取信息。链接器错误表示“函数printum中对'finditem'的未定义引用

1 个答案:

答案 0 :(得分:1)

此代码在GCC 4.1.2下使用选项-Wall -Wextra -std=c99编译:

#include <stddef.h>

typedef struct SomeProduct
{
    int                 itemNum;
    char                itemName[21];
    double              unitPrice;
    int                 stockQty;
    int                 restockQty;
    struct SomeProduct *next;
} SProduct;

struct llpro
{
    SProduct data;
    struct llpro *next;
};

SProduct findItem(struct llpro *head,int num);

int main(void)
{
    struct llpro *head = 0;
    SProduct steve;
    steve = findItem(head, 1);
}

SProduct findItem(struct llpro *head, int num)
{
    while (head != NULL)
    {
        if (head->data.itemNum == num)
        {
            SProduct paul;
            paul = head->data;
            return paul;
        }
    }
    SProduct alan = { 0, "", 0.0, 0, 0, 0 };
    return alan;
}

主要更改是使用1代替findItem()参数的复杂值,并在return末尾添加findItem()。既不会影响任何作业。

因此,假设您遇到问题,您错误地摘录了代码,并没有向我们展示造成问题的行。