如何解决打破两个相互依赖的类的循环依赖
我的程序的一部分基本上归结为下面的代码,由于循环依赖而无法编译。我知道之前有关于这个主题的讨论,但之前的解决方案(至少我找不到)都不能解决我的情况:
啊
Database changed
MysqL [mydatabase]> SELECT count(*) FROM mydatabase.DomainVersions AS
dv LEFT JOIN domains AS d ON dv.DomainId = d.DomainId WHERE
dv.TemplateId LIKE 'companyDC-Vpc_2021-05%' AND (d.DomainMode =
'"VPC"' OR d.DomainMode = '"CONNECT"') AND NOT DomainState =
'"Deleted"' AND NOT DomainState = '"Deleting"' AND NOT DomainState =
'"Failed"';
+----------+
| count(*) |
+----------+
| 397 |
+----------+
1 row in set (0.20 sec)
MysqL [mydatabase]> Ctrl-C -- exit!
Aborted
[/home/myself]
myself@devBox $ MysqL -u $MysqLUsername --password=$MysqLPasswd -h
$MysqLHostname -e "use mydatabase; SELECT count(*) FROM
mydatabase.DomainVersions AS dv LEFT JOIN mydatabase.domains AS d ON
dv.DomainId = d.DomainId WHERE dv.TemplateId LIKE
'companyDC-Vpc_2021-05%' AND (d.DomainMode = '"VPC"' OR d.DomainMode
= '"CONNECT"') AND NOT DomainState = '"Deleted"' AND NOT DomainState
= '"Deleting"' AND NOT DomainState = '"Failed"';"
+----------+
| count(*) |
+----------+
| 0 |
+----------+
B.h
#ifndef A_H
#define A_H
#include <iostream>
#include "B.h"
class A
{
public:
typedef struct a_struct
{
int x;
int y;
}a_struct_t;
void print_something() { std::cout << "Hello world" << std::endl; }
private:
typedef struct another_struct
{
int x;
a_struct_t a_struct;
}another_struct_t;
friend void B::b_func1();
};
#endif
B.cpp
#ifndef B_H
#define B_H
#include "A.h"
class B
{
public:
void b_func1();
A::a_struct_t b_func2();
};
#endif
try.cpp
#include "B.h"
void B::b_func()
{
A::another_struct_t another_struct;
// Do something with another_struct;
}
A::a_struct_t B::b_func2()
{
A::a_struct_t a_struct;
return a_struct;
}
问题是 #include "A.h"
int main()
{
A a_object;
a_object.print_something();
return 0;
}
不能在没有 class A
的情况下在 Ah 中只与 void B::b_func1()
交朋友并且完全定义 #include "B.h"
,但是 class B
也不能在 Bh 中使用 class B
而不使用 A::a_struct_t
并完全定义 include "A.h"
。我已经尝试在 B.h 中向前声明 class A
,但我仍然无法在 B.h 中使用 class A
,因为 A::a_struct_t
是一个不完整的类型。
我可以将 class A
移到 a_struct_t
中,这有效,但它确实属于 class B
。此外,我可以在 A.h 中与整个 class A
交朋友,而不是 class B
,这也有效,但理想情况下,我只想与 #include "B.h"
交朋友,而不是整个 void B::b_func1()
。有没有办法使这项工作?提前致谢,
附言- 我读过关于前向声明的内容,这是另一个线程中的最高评论。不幸的是,这在我的情况下不起作用,至少我无法以摆脱 class B
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。