2

如果封闭类有一个作为内部类实例的成员变量,那么将内部类和封闭类的定义分成不同的头文件的正确方法是什么?

这是Outer(封闭类)的标题:

//outer.h
#ifndef OUTER_H_INCLUDED
#define OUTER_H_INCLUDED

#include "inner.h"

class Outer
{
    class Inner;

public:
    /* public member functions */

private:        
    Inner inner_instance;
};

#endif

和标题Inner

//inner.h
#ifndef INNER_H_INCLUDED
#define INNER_H_INCLUDED

#include "outer.h"

class Outer::Inner
{
    /* definition */
};

#endif

这不会编译。问题是两个类都必须看到彼此的定义。是否有可能打破循环依赖并仍然保持定义分开?

4

1 回答 1

3

不,您可以做的最好的事情是存储一个指向内部类的指针(或者可能是引用),这允许Inner不完整。这通常被称为pImpl成语。

于 2017-09-23T17:35:12.040 回答