Размер хранилища не известен ошибка со структурами - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь объявить структуры в main (), которые я построил в отдельном файле, но получаю сообщение об ошибке:

error: storage size of 'phone' isn't known

Вот код для main. c:

#include "header.h"
int main(int argc, char **argv)
{
    struct firstAndLast name;
    struct contact phone;
    struct address adr;
    struct allInfo individual;

    print_person(individual);
    return 0;
}

Это файл функции. c, в который я записал структуры:

#include "header.h"
struct firstAndLast
{
    char firstName[20];
    char lastName[20];
};
struct contact
{
    int pNumber;
};
struct address
{
    struct firstAndLast person;
    struct contact phoneNumber;

    char streetAddress[100];
    char city[50];
    char province[50];
    char postalCode[10];
};
struct allInfo
{
    struct address addr;
    char occupation[50];
    double salary;
};
void print_person(struct allInfo indiv)
{
    printf("%s \n",indiv.addr.person.firstName);
}

И это файл header.h:

#ifndef nS
#define nS

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct firstAndLast;
struct contact;
struct address;
struct allInfo;
void print_person(struct allInfo indiv);

#endif

Я не уверен, почему я получаю эту ошибку. Я поместил все функции в файл заголовка и использовал #include "header.h" как для моего основного. c, так и для файлов. c, поэтому он должен распознавать существующие структуры. Есть ли проблема с тем, как я объявил структуры в main () или как я перечислил их в заголовке? Я не вижу опечаток в своем коде, поэтому я действительно потерян и не знаю, что я делаю неправильно.

1 Ответ

1 голос
/ 16 марта 2020

Во-первых, вам нужно переместить определения полной структуры в файл заголовка.

#pragma once
#ifndef nS
#define nS

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct firstAndLast
{
    char firstName[20];
    char lastName[20];
};
struct contact
{
    int pNumber;
};
struct address
{
    struct firstAndLast person;
    struct contact phoneNumber;

    char streetAddress[100];
    char city[50];
    char province[50];
    char postalCode[10];
};
struct allInfo
{
    struct address addr;
    char occupation[50];
    double salary;
};
void print_person(struct allInfo indiv);

#endif

Кроме того, пожалуйста, инициализируйте каждую переменную перед их использованием.

Например:

    struct firstAndLast name;
    strcpy(name.firstName, "firstNameA");
    strcpy(name.lastName, "lastNameB");
    struct contact phone;
    phone.pNumber = 01234567;
    struct address adr;
    adr.person = name;
    adr.phoneNumber = phone;
    strcpy(adr.streetAddress, "ABC street");
    strcpy(adr.city, "DEF city");
    strcpy(adr.province, "GH");
    strcpy(adr.postalCode, "12345");
    struct allInfo individual;
    individual.addr = adr;
    strcpy(individual.occupation, "Occupation");
    individual.salary = 1234.56;
    print_person(individual);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...