【问题标题】:Using 'typedef struct' in classes [duplicate]在类中使用“typedef struct”[重复]
【发布时间】:2019-04-15 09:01:11
【问题描述】:

我尝试以这种方式在类中使用“typedef struct”。 你能期待我想要的吗? 如您所见,这似乎是不可能的。 是不是真的不可能?

class CTestStructure
{
public:
    typedef struct stTestInClass;
    StTestInClass   mmm;    // Compile error C3646
};

struct CTestStructure::stTestInClass
{
    int i;
}StTestInClass;

int main()
{
    CTestStructure testStructure;
}

【问题讨论】:

  • typedef struct stTestInClass; 在 C++ 中没有多大意义(命名为匿名 struct)。 struct stTestInClass; 就足够了。虽然,StTestInClass mmm; 使用不完整的struct 作为成员。这行不通。
  • 顺便说一句。另外,typedef struct stTestInClass; 中有一个错字:第一个 s 必须是大写。
  • 感谢您的回复。但是,我想添加 'typedef' 的原因是允许其他类使用这种结构类型,例如 CTestStructure::StTestInClass aaa;
  • @SungsuKim 您不需要 typedef 就可以像 C++ 中那样使用 struct 标记作为类型名。 struct stTestInClass { int i; }; 然后CTestStructure::stTestInClass 就可以了。

标签: c++


【解决方案1】:

首先,结构不需要typedefstructclass 相同,但默认使用 public 访问权限。

其次,要能够定义非指针或非引用变量,您需要类型(结构)的完整定义。

自然的解决方案是在类中简单地定义结构内联:

class CTestStructure
{
public:
    struct stTestInClass
    {
        int i;
    };

    stTestInClass   mmm;
};

【讨论】:

    【解决方案2】:

    您可以这样做,但在 C++ 中,您不需要像在 C 中那样对结构使用 typedef(为了摆脱“struct”关键字)。你的问题是你有一个 StTestInClass 类型的成员,它是一个匿名类型(你只提到它的名字,它只是一个没有定义的声明)。您可以这样使用它,但是您的成员必须是指向 StTestInClass 对象的指针,并稍后在其他地方定义此结构,或者您可以在使用它之前定义 StTestInClass 结构,并按照您的方式在您的类中拥有一个 StTestInClass 类型的成员。

    【讨论】:

      猜你喜欢
      • 2010-12-13
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 2022-09-25
      • 2014-01-01
      • 1970-01-01
      相关资源
      最近更新 更多