结构模式的正向声明

Forward declaration of structure pattern

提问人:LPo 提问时间:11/22/2022 最后编辑:LPo 更新时间:11/22/2022 访问量:51

问:

我被迫使用下面将介绍的架构。前向声明是我试图实现的模式来解决这个问题。

这是我到目前为止所拥有的:

class_with_config.h :

#include "config_file.h"
#include "i_class_with_config.h"

class ClassWithConfig : public I_ClassWithConfig
{
    // specific implem
};

config_file.h

struct A {
   bool A1;
   bool A2;
}

struct B {
   bool B1;
   bool B2;
}

struct C {
   A a;
   B b;
}

i_class_with_config.h

struct B; // forward declaration of struct B

class I_ClassWithConfig
{
  // definition of interface
};

side_class.h

#include "i_class_with_config.h"

class SideClass
{
public :
   SideClass(B* config);

private :
   void Foo(void);
   B* my_config;
};

side_class.cpp

SideClass::SideClass(B* argConfig) : my_config(argConfig) 
{
}

void SideClass::Foo(void)
{
   if (my_config->B1 == true)
   {
      // do something
   }
}

我需要在我的实现中使用,但我得到my_configSideClass

不允许指针指向不完整的类类型“B”

这看起来像是结构问题的前瞻性声明,但这种模式与我遇到过的任何东西都不一样。

主要限制是我无权包含在config_file.hside_class.h

编辑 1:根据 @Stack Danny 和莫斯科 anwsers 的@Vlad更正了错别字。

C++ 编译器错误 结构 forward-declaration

评论

0赞 Stack Danny 11/22/2022
您的课程需要在右大括号后以分号结束。};
2赞 Vlad from Moscow 11/22/2022
@LPo my_config 是一个指针。因此,如果 (my_config.B1 == 真)
1赞 n. m. could be an AI 11/22/2022
在您需要的地方提供您需要的东西。您需要在 中定义,因此包含在 中。你不需要定义,所以不要包括在那里。class Bside_class.cppconfig_file.hside_class.cppclass Bside_class.hconfig_file.h
1赞 asimes 11/22/2022
@LPo,使用 (例如) 的内部结构需要知道这些内部结构(包括文件)BB1
1赞 asimes 11/23/2022
@LPo stackoverflow.com/questions/553682/......

答:

1赞 user12002570 11/22/2022 #1

主要限制是我无权包含在config_file.hside_class.h

您可以通过包含和进入来解决问题,如下所示。side_class.hconfig_file.hside_class.cpp

side_class.cpp

#include "side_class.h"       //added this 
#include "config_file.h"      //added this 

SideClass::SideClass(B* argConfig) : my_config(argConfig) 
{
}

void SideClass::Foo(void)
{
   if (my_config->B1 == true)
   {
      // do something
   }
}

工作演示


另请注意,您应该在上面链接的工作演示中在标头中使用包含防护。