C++嵌套类实例
C++ nested class instances
我有2个类:
啊:
#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
问题是如何使其与这种代码结构或其他结构一起工作。
应该存在的主要功能是在持有 B 对象的 A 对象中调用事件。
一切帮助将不胜感激。
Forward 声明class A;
在 B.h 中,class B;
在A.h中声明
然后,您应该将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);
}
嗯,像这样的东西...
通常的方法是提供保护宏以防止递归,并在需要时将函数的定义移动到单独的文件中:
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
}
相关文章:
- 创建模板嵌套类实例的语法?
- 另一个类中嵌套模板的外部实例化
- Cllass 函数不解析嵌套类实例或函数
- C++嵌套类实例
- 为什么 clang 不允许通过实例访问嵌套枚举类?
- 为什么Clang无法使用默认的Integer_Sequence实例化嵌套的变异模板
- OpenMP 如何知道嵌套了多少个循环实例
- 声明嵌套基模板类实例是派生类的好友
- 访问嵌套类(如果容器没有其实例)
- 如何在给定包含类的实例的情况下实例化嵌套类
- 外部类的嵌套类定义,而外部类包含内部类的实例
- 私有嵌套类 c++ 的可视化实例
- 嵌套模板类的实例化
- 当创建嵌套类的实例时,是否也是正在生成的嵌套类的一个实例
- 通过外部类的实例访问嵌套的内部类
- 初始化模板类中嵌套类的静态实例
- 如果模板存在嵌套类型(未访问),且该方法无法编译,则模板可以实例化吗?
- 允许嵌套结构具有包含类的实例
- 如何使嵌套类的变量对父类的每个实例都是静态的
- 嵌套类中的类实例化