【问题标题】:compiler error: "Expected ;" error in C struct编译器错误:“预期;” C结构中的错误
【发布时间】:2013-06-21 16:53:59
【问题描述】:

我正在尝试使用以下语法将struct 添加到我的程序中:

struct foo {
    char bar[] = "baz";
    char qux[] = "abc";
    /* and so on */
};

由于某种原因,我在struct 中的每个变量声明上都收到一个错误,说我必须添加分号,并且似乎陷入了这种循环。建议的语法类似于

struct foo {
    char bar[]; =; ;;;;;;/* infinite semicolons */"baz";
}

这是我第一次遇到这种错误;我真的做错了什么,还是这只是编译器本身的问题?

【问题讨论】:

  • 您甚至不知道声明结构的语法(也不知道编译器和IDE之间的区别),并且指责Xcode的创建者编写了如此巨大的错误?我认为对你来说今天的词是谦虚。
  • 我并没有指责 Xcode 背后的程序员做任何事情。我知道会发生软件错误,而且我是结构的新手。我认为他们可以遵循类似于unions 的语法。
  • @user2129150 他们做遵循类似于union的语法...你也不能像union那样做。

标签: c struct syntax


【解决方案1】:

这与 Xcode 无关。完全没有。

您收到 编译器 错误,因为您无法像这样初始化结构。

结构类型定义仅与类型有关。此时给成员赋值是没有意义的。也许你的意思是

struct foo {
    char *bar;
    char *baz;
};

struct foo x = { "quirk", "foobar" };

改为?

【讨论】:

  • 初始化结构成员确实有意义;事实上,C++ 从 2011 ISO 标准开始就允许它,可能是通过创建一个隐式构造函数。语义似乎足够清晰;默认情况下,该类型的每个创建的对象都会将这些成员初始化为指定的值。 C 只是碰巧不允许这样做。
【解决方案2】:

你做错了什么。您不能为结构的成员赋值……您正在定义数据类型,而不是它的实例。

这将为您提供结构定义,然后直接声明其类型的变量(带有初始化):

struct foo {
    char *bar;
    char *qux;
} variable_name = {
    "baz", "abc"
};

【讨论】:

    猜你喜欢
    • 2022-09-29
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    相关资源
    最近更新 更多