C++嵌套类实例

C++ nested class instances

本文关键字:实例 嵌套 C++      更新时间:2023-10-16

我有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 includeA.h包括B.hB.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
}