所以我在项目的最后一步,我必须从函数返回一个结构,所以我可以在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'的未定义引用
答案 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()
。既不会影响任何作业。
因此,假设您遇到问题,您错误地摘录了代码,并没有向我们展示造成问题的行。