【问题标题】:typedef of nested structs嵌套结构的 typedef
【发布时间】:2013-02-28 23:50:29
【问题描述】:

我正在尝试使用以下方法对一组嵌套结构进行 typedef:

struct _A
{
    struct _Sim
    {
        struct _In
        {
            STDSTRING UserName;
            VARIANT Expression;
            int Period;
            bool AutoRun;
            //bool bAutoSave;
        } In;

        struct _Out
        {
            int Return;
        } Out;

    } Sim;

} A;

typedef _A._Sim._In SIM_IN;

关键是VS2010的编辑器很喜欢。它识别 typedef 中的元素,我可以将它作为函数的参数包含在内,但是当你去构建它时,我首先收到警告 C4091(当没有声明变量时在左侧被忽略),然后导致错误 C2143“缺少';'在'.'之前。

typedef 的想法是使管理类型定义(在指针、原型等中)到 _A._Sim._In 使用一个名称变得容易……如果编译器允许,这似乎是 typedef 的完美用途。

与使用整个嵌套名称 (_A._Sim._In) 相比,如何使用一个名称来引用嵌套结构以使指针管理和类型说明更容易?

【问题讨论】:

  • 我刚刚修复了它..替换了“。”与“::”
  • 嗨 Nux...我需要类型和变量信息。我对结构如何工作的理解是顶部是类型,底部是变量(如果你想要的话)。在我的情况下,我需要定义类型和变量。
  • 我会玩的。感谢您的提醒。
  • @brimaa 请记住将您问题的答案作为答案发布并接受。

标签: c++ struct nested typedef


【解决方案1】:

点运算符是应用于对象的后缀运算符(在C语言中)。即,您不能将其应用于类型。

要达到你想要的,你可以使用函数或宏,例如:

 #define SIM_IN(x) x._Sim._In

【讨论】:

  • 感谢所有回复的人。我认为包含多个符号和链接问题的问题可能是 C++ 语言最难理解的方面之一,因为这种行为是出乎意料的,而且原因通常很微妙且难以确定。即使我读过的教科书也没有公正地解决这些问题,但它们对于理解构建任何规模合理的程序至关重要。我发现的有关 C++ 的最佳信息来源之一是 IBM 文档。
  • publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/… 它写得清晰简洁,几乎涵盖了 C++ 和 C 的所有规则。我正在使用 VS,但这是我目前理解 C++ 规则的圣经。
【解决方案2】:

这样做可能不太好,但是如果使用 typedef 无法实现,我想你总是可以这样做

#define _A._Sim._In SIM_IN

但正如我所说,由于各种原因,您可能不喜欢这样。 :)

【讨论】:

    猜你喜欢
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多