我不得不使用下面将要介绍的体系结构。前向声明是我试图实现的模式来解决这个问题。
以下是我目前所掌握的情况:
- 带有配置的类.h:*
#include "config_file.h"
#include "i_class_with_config.h"
class ClassWithConfig : public I_ClassWithConfig
{
// specific implem
};
- 配置文件.h*:
struct A {
bool A1;
bool A2;
}
struct B {
bool B1;
bool B2;
}
struct C {
A a;
B b;
}
- i_类与_配置.h*:
struct B; // forward declaration of struct B
class I_ClassWithConfig
{
// definition of interface
};
- 侧类.h*:
#include "i_class_with_config.h"
class SideClass
{
public :
SideClass(B* config);
private :
void Foo(void);
B* my_config;
};
- 侧_类.cpp*:
SideClass::SideClass(B* argConfig) : my_config(argConfig)
{
}
void SideClass::Foo(void)
{
if (my_config->B1 == true)
{
// do something
}
}
我需要在我的SideClass
实现中使用my_config
,但是我得到
不允许指向不完整类类型“B”的指针
这看起来像是一个结构问题的前向声明,但这种模式与我所遇到的任何模式都不同。
主要限制是我无权将config_file.h
包含到side_class.h
中
编辑1:根据来自莫斯科的@Stack Danny和@Vlad的回复更正了错字。
1条答案
按热度按时间s3fp2yjn1#
主要约束是我无权将
config_file.h
包含到side_class.h
中您可以通过将
side_class.h
和config_file.h
包括到side_class.cpp
中来解决此问题,如下所示。侧类.cpp
Working demo
另请注意,您应该像上面链接的工作演示中所做的那样,在标题中使用include guards。