Установка Struct равной функции, которая возвращает ту же структуру - PullRequest
2 голосов
/ 08 февраля 2012

Итак, я на последних шагах моего проекта, и мне нужно вернуть структуру из функции, чтобы я мог использовать ее в 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 и получить информацию из того, который разделяет номер элемента с тем, который я ищу. Ошибка компоновщика говорит "неопределенная ссылка на 'finditem' в функции printsum

1 Ответ

1 голос
/ 08 февраля 2012

Этот код компилируется в 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().Ни один из них не влияет на какие-либо назначения.

Итак, если у вас возникли проблемы, вы неправильно выделили свой код и не показали нам строки, вызывающие проблему.

...