如何转发声明向量<B*>*(不是向量<B>或向量<B*>)?

How to forward declare vector<B*>* (not vector<B> or vector<B*>)?

本文关键字:gt 向量 lt 转发 何转发 声明      更新时间:2023-10-16

我知道我们可以通过使用指针来隔离类,这样类的头在头中就不需要了,例如:

class B;
class A{
    B* b;
};

它阻止#在A.h中包含"B.h"。现在我想阻止

#include <vector>

在标头中,所以我尝试复制语法,使用向量的指针:

class std::vector<B*>;
class A{
    std::vector<B*>* v;
};

但编译失败,是否可以通过使用vector的指针来阻止包含vector头?

您正在寻找:

#include <vector>
class B;
class A
{
    std::vector<B *> *v;
};

不允许尝试为namespace std; 的成员提供您自己的声明

如果您不希望您的标头包含<vector>,则不能在类中使用任何涉及vector的类型。你可以使用pImpl。

无需执行类std::vector;将A类定义为

#include <vector>
class B;
class A
{
  std::vector<B*> *v; 
};

或者您可以在A类中使用typedef std::vector<B*> VEC_PTR_B_T;VEC_PTR_B_T *v