时间:2015-07-10 12:58:09

标签: c++

我有一个class A由文件 A.hpp A.cpp 实施。
class A的一种方法接收消息,将其翻译并存储到结构中 方法签名看起来像这样,方法是公共的:

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

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

C ++是否为我提供了合法的方式(而不是某些"丑陋的"技巧)来指示tParsedDataFromA在下面定义,因此我可以使用对tParsedInfoFromA类型结构的引用声明ParseInfo方法?
我尝试了前置声明,但编译器没有获得它。

非常感谢您的评论

1 个答案:

答案 0 :(得分:0)

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

在标题中,forward将结构声明为:

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
};