首页 > 解决方案 > 为什么在函数内部声明后结构不存在?

问题描述

我已经尝试了很多简单的例子,但没有任何工作。

我的目标是有一个函数在内部声明一个结构,设置结构的值,然后返回结构。

struct getData(void){
    typedef struct{
        int count1;
        int count2;
    } MyStruct;

    MyStruct myData;

    myData.count1 = 5;
    myData.count2 = 6;

    return myData;
};

int main(void) {
    struct myData = getData()

    printf("count1: %i", myData.count1);
    printf("count2: %i", myData.count2);
}

我发现的每个示例都与此类似,但由于某种原因,它没有找到我的名为 MyStruct 的结构。确切的错误是:

error: expected identifier or ‘(’ before ‘void’
 struct getData(void){
                ^~~~

我不断收到的错误让我认为它不喜欢函数内部的结构。

标签: cstruct

解决方案


您的问题似乎是对struct关键字的使用感到困惑。你不需要struct myData声明一个名为的变量myData,它是struct类型的,因为没有真正的struct类型。您所做的是struct myData <SOMETHING>定义<SOMETHING>为一个名为 的新数据类型struct myData。然后你可以说struct myData dat;,从而声明它dat是一个类型的变量struct myData

你也在顶部展示了同样的困惑,你有struct getData(void)......你试图声明getData一个返回结构的函数,但你真的必须做一些事情,比如struct myData getData(void)声明一个返回类型的函数struct myData


推荐阅读