2

我想让我的结构在main()函数范围内。当我这样做并使用typedef时,出现错误:storage size of ... isn't known

typedef struct client client;

int main()
{


    struct client {
        int var;
        char c;
    };


    client person1;

    return 0;
}

我这样做是为了摆脱 struct 关键字。
为什么会出现此错误,如何通过在main()函数中创建结构来成功地做到这一点?

4

3 回答 3

3

struct client您得到的错误是因为您实际上在不同的范围内声明了两种名为的类型。

typedef声明一个在struct client文件范围内并给它别名client。然后,当您在函数内部定义时,它会掩盖文件范围struct client内的函数。然后,当您尝试声明 type 的变量时,它指的是从未定义过的文件范围。mainclientstruct client

要解决此问题,typedef和 struct 定义需要在同一范围内。因此,您可以将它们都放入main

int main()
{
    typedef struct client client;
 
    struct client {
        int var;
        char c;
    };

    client person1;

    return 0;
}

或两者都在文件范围内:

typedef struct client client;

struct client {
    int var;
    char c;
};

int main()
{
    client person1;

    return 0;
}
于 2020-12-11T15:47:30.157 回答
0

您可以在以下位置声明struct权利typedef

typedef struct client {
    int var;
    char c;
} client;


int main()
{
    client person1;

    return 0;
}
于 2020-12-11T14:52:36.390 回答
-1

typedef应该用于已经定义的事物。在您的情况下,客户端未在该范围内定义。如果你想在 main 里面有一个结构,试试这个

// in main
typedef struct client {
        int var;
        char c;
} client;

client person1;

或者您可以主要执行此操作

struct client {
        int var;
        char c;
    };

struct client person1;
于 2020-12-11T15:15:35.463 回答