提问人:LPo 提问时间:11/22/2022 最后编辑:LPo 更新时间:11/22/2022 访问量:51
结构模式的正向声明
Forward declaration of structure pattern
问:
我被迫使用下面将介绍的架构。前向声明是我试图实现的模式来解决这个问题。
这是我到目前为止所拥有的:
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_config
SideClass
不允许指针指向不完整的类类型“B”
这看起来像是结构问题的前瞻性声明,但这种模式与我遇到过的任何东西都不一样。
主要限制是我无权包含在config_file.h
side_class.h
编辑 1:根据 @Stack Danny 和莫斯科 anwsers 的@Vlad更正了错别字。
答:
1赞
user12002570
11/22/2022
#1
主要限制是我无权包含在
config_file.h
side_class.h
您可以通过包含和进入来解决问题,如下所示。side_class.h
config_file.h
side_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
}
}
另请注意,您应该在上面链接的工作演示中在标头中使用包含防护。
评论
};
class B
side_class.cpp
config_file.h
side_class.cpp
class B
side_class.h
config_file.h
B
B1