C 中结构中未声明的函数
Undeclared Function within struct in C
我有以下 code
:
#include <stdio.h>
#include <string.h>
void getData() {
static int HasDataBeenWritten;
if (HasDataBeenWritten == 0) {
enum flags
{
Country_NA = 1,
CountryUS = 2,
CountryCN = 4,
CountryCA = 8,
Business_NA = 16,
BusinessYes = 32,
BusinessNo = 64,
TypeOfEntityNonCommericial = 128,
EntityPersonal = 256,
EntityAll = 512,
};
struct TopDomain
{
char *DomainName;
unsigned int DataFlags:9;
};
static struct TopDomain DomainData[8];
static char DomainNameArray1[3] = {"EDU"};
DomainData[0].DomainName = DomainNameArray1;
DomainData[0].DataFlags = 145;
HasDataBeenWritten = 1;
}
printf("DomainData[0] : %i", (DomainData[0].DomainName));
printf("DomainData[0] : %d", DomainData[0].DataFlags);
}
我想打印 *DomainName
指向的数组,甚至只是指针。但是,我收到此错误消息
getData.c:48:32 error: 'DomainData' undeclared (first use in this function) (printf("DomainData[0] : %i", (DomainData[0].DomainName));
我需要在数组中声明结构还是什么?
您需要在 printf
调用点可见的地方声明 DomainData
(这是一个 struct TopDomain
结构的数组)。
您已在一组大括号内声明了它。名称的范围从声明扩展到最近的封闭 }
,它就在 printf
调用之前。 (由于是static
,它的lifetime是程序的整个执行过程,所以那个时候对象还存在,问题是看不到它的名字。)
由于 DomainData
依赖于 struct TopDomain
和 enum flags
的声明,因此您也需要移动它们。
(在复合语句中声明类型很少有意义。)
顺便说一句,您的格式字符串不正确。在您的第一个 printf
中,您使用 %i
作为类型 char*
的参数;你想要 %s
(假设指针不是 NULL
)。在你的第二个中,你使用 %d
作为 unsigned int
类型的参数;你想要 %u
(或者 0x%x
在这种情况下可能更清楚)。
我有以下 code
:
#include <stdio.h>
#include <string.h>
void getData() {
static int HasDataBeenWritten;
if (HasDataBeenWritten == 0) {
enum flags
{
Country_NA = 1,
CountryUS = 2,
CountryCN = 4,
CountryCA = 8,
Business_NA = 16,
BusinessYes = 32,
BusinessNo = 64,
TypeOfEntityNonCommericial = 128,
EntityPersonal = 256,
EntityAll = 512,
};
struct TopDomain
{
char *DomainName;
unsigned int DataFlags:9;
};
static struct TopDomain DomainData[8];
static char DomainNameArray1[3] = {"EDU"};
DomainData[0].DomainName = DomainNameArray1;
DomainData[0].DataFlags = 145;
HasDataBeenWritten = 1;
}
printf("DomainData[0] : %i", (DomainData[0].DomainName));
printf("DomainData[0] : %d", DomainData[0].DataFlags);
}
我想打印 *DomainName
指向的数组,甚至只是指针。但是,我收到此错误消息
getData.c:48:32 error: 'DomainData' undeclared (first use in this function) (printf("DomainData[0] : %i", (DomainData[0].DomainName));
我需要在数组中声明结构还是什么?
您需要在 printf
调用点可见的地方声明 DomainData
(这是一个 struct TopDomain
结构的数组)。
您已在一组大括号内声明了它。名称的范围从声明扩展到最近的封闭 }
,它就在 printf
调用之前。 (由于是static
,它的lifetime是程序的整个执行过程,所以那个时候对象还存在,问题是看不到它的名字。)
由于 DomainData
依赖于 struct TopDomain
和 enum flags
的声明,因此您也需要移动它们。
(在复合语句中声明类型很少有意义。)
顺便说一句,您的格式字符串不正确。在您的第一个 printf
中,您使用 %i
作为类型 char*
的参数;你想要 %s
(假设指针不是 NULL
)。在你的第二个中,你使用 %d
作为 unsigned int
类型的参数;你想要 %u
(或者 0x%x
在这种情况下可能更清楚)。