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 TopDomainenum flags 的声明,因此您也需要移动它们。

(在复合语句中声明类型很少有意义。)

顺便说一句,您的格式字符串不正确。在您的第一个 printf 中,您使用 %i 作为类型 char* 的参数;你想要 %s(假设指针不是 NULL)。在你的第二个中,你使用 %d 作为 unsigned int 类型的参数;你想要 %u(或者 0x%x 在这种情况下可能更清楚)。