繁体   English   中英

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 ,它的生命周期是程序的整个执行过程,所以那个时候对象仍然存在。问题是它的名字不可见。)

由于DomainData依赖于struct TopDomainenum flags的声明,因此您还需要移动它们。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM