类使用的结构的类型定义

Typedef of structure that is used by a class

本文关键字:类型 定义 结构      更新时间:2023-10-16

我有一个class A实现的文件A.hpp和和 a.p
class A的一种方法是接收消息,将其翻译并存储到一个结构中。方法签名如下所示,方法是公共的:

eRetCode A::ParseInfo(sometype* pMessage, tParsedInfoFromA& ParsedInfo);

我认为tParsedInfoFromA类型应该在A.hpp处定义(使用typedef),因为它与类相关,没有类就没有意义。
最简单的方法是在类的上面定义它。但是,我觉得文件A.hpp应该从a类声明开始。
所以我希望结构的typedef出现在类声明之后。

c++是否为我提供了合法的方式(不是一些"丑陋"的技巧)来指示tParsedDataFromA在下面定义,以便我可以在ParseInfo方法的声明中使用对tParsedInfoFromA类型结构的引用?
我尝试向前声明,但编译器不会有它。

感谢您的评论

假设您的类A没有成员、方法返回值或tParsedInfoFromA类型的参数(只有tParsedInfoFromA&tParsedInfoFromA*),并且您在cpp文件中提供了类A的实现,您可以实现您想要的。

在头文件中,向前声明struct为:

struct tParsedInfoFromA;

然后定义类A:

class A 
{
    eRetCode A::ParseInfo(sometype* pMessage, tParsedInfoFromA& ParsedInfo);
    // ...
};

然后定义结构体:

struct tParsedInfoFromA {
    // ...
};

我有一些想法。如果tParsedInfoFromA(不是最好的名称,但我认为实际名称更好)只包含几个成员,那么在a之前定义它是有意义的。如果它较长,你最好把它放在一个单独的文件中。最后,如果您觉得您的结构体的定义与您的类不可分离,您可以声明嵌套在a中的结构体。

class A
{
    struct tParsedInfoFromA
    {
      // struct members
    }
    eRetCode A::ParseInfo(sometype* pMessage, tParsedInfoFromA& ParsedInfo);
    // class members
};