【问题标题】:Using Structs -- Odd Issue使用结构——奇怪的问题
【发布时间】:2010-01-13 20:16:28
【问题描述】:

自从我在 C++ 中使用结构以来已经有一段时间了。

知道为什么这不起作用吗?我的编译器抱怨 DataStruct 不是可识别的类型,但 VC++ 中的 Intellisense 仍然能够看到结构内的数据成员,因此语法没问题...

令人沮丧。 xD

struct DataStruct
{
    int first;
};



int main(int argc, char **argv)
{   
    DataStruct test;
    //test.first = 1;
}

【问题讨论】:

    标签: c++ struct


    【解决方案1】:

    您确定要将文件编译为 C++ 吗?如果您将其编译为 C(即,如果文件具有 .c 而不是 .cpp 扩展名),则会遇到问题。

    【讨论】:

    • 就是这样。正在使用模板,但没有注意到它是 .c 而不是 .cpp
    • 这也是我的第一个猜测。上面的代码是合法的 C++ 但不是合法的 C。
    • 澄清一下:Bobber 说的是 VC++ IDE 模板,而不是 C++ 中的 templates。
    • 作为规则 typedef 结构的另一个原因 - 那么你不必担心它会编译为 C 还是 C++ - 它可以在两者中工作。当然,知道你是在使用 C 还是 C++ 总是一个好主意,但是如果唯一的缺点是你可以让你的编辑器做更多的打字(双关语),为什么不让代码同时工作给你?
    • @Michael 在编写 C++ 代码时,我从没想过它可以在 C 下编译。例如,我通常给结构一个构造函数。所以使用 typedef 是没有意义的。
    【解决方案2】:

    您正在编译为 C 代码。 C 要求您使用“Struct”关键字或 typedef 来引用它。 C++ 没有。

    【讨论】:

      【解决方案3】:

      您需要使用struct DataStruct 来引用该结构。

      或者,如果不想在任何地方使用“结构”,您可以将其定义为DataStruct

      【讨论】:

      • 这就是为什么立即接受解决问题的第一个答案并不是一个好主意。通常,它完全没有抓住重点。
      • 这根本不是真的。正如其他人所写,最可能的问题是您将文件保存为“.c”或以其他方式编译为 C 而不是 C++。
      • 问题是,即使你不需要用 C++ 来做,也没有什么坏处。
      猜你喜欢
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      相关资源
      最近更新 更多