C ++嵌套类实例

时间:2017-07-18 18:32:16

标签: c++ arrays class nested instance

我所拥有的是两门课程:

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 includeA.h包括B.hB.h包括A.h

问题是如何使其与代码结构或其他结构一起使用。

应该存在的主要特征是在A对象中调用事件,该对象持有B对象。

我们将不胜感激。

2 个答案:

答案 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);
}

嗯,这样的......