c - 存储大小未知结构错误
问题描述
我正在尝试在我的 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;
}
这是我在其中编写结构的 function.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
我不确定为什么会收到此错误。我将所有函数放在头文件中,并为我的 main.c 和 functions.c 文件使用了#include "header.h",因此它应该识别出存在的结构。我在 main() 中声明结构的方式或在标题中列出它们的方式是否存在问题?我在我的代码中没有看到任何拼写错误,所以我真的很迷茫,不知道我做错了什么。
解决方案
首先,您需要将完整的结构定义移动到头文件中。
#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);
推荐阅读
- excel - VBA 数字格式货币 2dp
- python - 使用 pandas 读取 csv 文件时使用哪种编码?
- amazon-web-services - 如何在 Amazon Cognito 和其他微服务之间建立关系?
- php - 如何在 magento 2 中使用 mysql 查询获取 db 表值。 Magento 2 使用 sql 查询?
- python - 如何使用 Python 从 SPSS 中的字符串中提取最后 2 个字符?
- azure - Send-MailMessage:无法从传输连接读取数据:net_io_connectionclosed
- python - 在python中搜索带有一个问号的字符串
- sql-server - 如何在 SQL Server 中将 varchar 转换为浮点数?我收到一个错误
- vb.net - 向串口发送和接收数据
- google-apps-script - 每天在特定时间激活谷歌应用脚本?