我所拥有的是两门课程:
A.H:
#include "B.h"
class A
{
vector<B*> arr;
void Update(int32 id){...};
}
B.h
#include "A.h"
class B
{
int32 id;
A* parent;
void OnRemove()
{
...
parent->Update(id);
}
}
有了这个逻辑,一切都必须正常工作。
但它不会因为loop include
:A.h
包括B.h
和B.h
包括A.h
问题是如何使其与代码结构或其他结构一起使用。
应该存在的主要特征是在A对象中调用事件,该对象持有B对象。
我们将不胜感激。
答案 0 :(得分:1)
通常的方法是提供保护宏以防止递归,并在需要时将函数的定义移到单独的文件中:
A.H
#ifndef _A_H_
#define _A_H_
#include "B.h"
class A
{
vector<B*> arr;
void Update(int32 id){...};
}
#endif
...
c.cpp(如果需要)
#include <a.h>
#include <b.h>
void B::onRemove() {
blahblahblah
}
答案 1 :(得分:1)
在 B.h 中转发声明class A;
,在 A.h
class B;
然后,您应该将onRemove()
的实施移至 B.cpp ,并在此处加入 A.h 。
也不要忘记你的包括警卫。例如:
#ifndef _A_H_
#define _A_H_
class B;
class A {
};
#endif
包含警卫也可以在标题的开头用#pragma once
替换,这有点不那么详细。
修改强>
完成:
// A.h
#pragma once
#include <vector>
class B;
class A {
std::vector<B*> arr;
public:
void Update(int32 id);
};
// A.cpp
#include "A.h"
// possibly #include "B.h" if necessary
void A::Update(int32 id) {
// impl ...
}
// B.h
#pragma once
class A;
class B
{
int32 id;
A* parent;
public:
void OnRemove();
};
// B.cpp
#include "B.h"
#include "A.h"
void B::OnRemove() {
parent->Update(id);
}
嗯,这样的......