继续收到“初始化器过多”错误

时间:2019-03-12 05:06:16

标签: c visual-studio

我目前正在尝试为一个赋值编写代码,而当我以为自己可以完成时,我总是收到太多的初始化错误,这是一个赋值,因此它必须是一个整数

这是我的结构:

struct Address {
    int streetNumber;
    char streetName[41];
    int apartmentNumber;
    char postalCode[8];
    char city[41];
};

这是我的代码:

int main(void) {
    struct Address addy = { { 0,"",0,"","" } };

当我放下第二个{}时,它可以工作,但是除非我使用的是双{},否则我上载的服务器将不会接受它。

3 个答案:

答案 0 :(得分:3)

下面的初始化程序有问题

struct Address addy = { { 0,"",0,"","" } }; 

因为struct Address的第一个成员streetNumber不能用{ 0,"",0,"","" }初始化。

这就是编译器警告您的内容。

您还有一副大括号。将该行更改为:

struct Address addy = { 0, "", 0, "", "" }; 

对您看到该错误的其他行进行类似的更改。

答案 1 :(得分:3)

在使用双括号的地方不需要双括号。结构类型的正确初始化器:

struct Address
{
    int streetNumber;
    char streetName[41];
    int apartmentNumber;
    char postalCode[8];
    char city[41];
};

将是:

struct Address addr1 =
{
    319,                    // Street number
    "Honeydew Road",        // Street name
    207,                    // Apartment number
    "RG13 2PQ",             // Postal code
    "Reading"               // City
};

使用C99和指定的初始化程序,您可以使用:

struct Address addr2 =
{
    .apartmentNumber = 0,
    .streetNumber = 719,
    .streetName = "Persimmon Way",
    .city = "London",
    .postalCode = "EC1A 3JN",
};

请注意,使用指定的初始值设定项,顺序并不关键。

如果您坚持使用双花括号,那么请注意,可以将常规标量变量的初始化程序放在(或不放在)花括号中:

int i1 = 0;       // Legitimate
int i2 = { 0 };   // Also legitimate

但是,在结构初始化器中,不能在标量周围使用花括号,但可以在数组周围使用括号:

struct Address addy = { 0, { "" }, 0, { "" }, { "" } };

尝试将0括在括号中会导致编译错误。

答案 2 :(得分:-1)

您在帖子中发表了一个奇怪的声明:

  

当我放下第二个.stop()时,它可以工作,但是除非我使用的是双{},否则我上载的服务器将不会接受它。

如果您将{}声明为数组,则双{}语法将起作用:

addy

或者,如果声明struct Address addy[] = { { 0,"",0,"","" } }; 的成员嵌入在另一个结构中:

Address