没有类声明的朋友成员函数

时间:2014-11-22 00:36:37

标签: c++ encapsulation friend forward-declaration member-functions

对此可能有一个非常简单的解决办法,但目前令我难以置信。所以,我正在编写C ++类来实现:

Header.h:

#pragma once
//...
class arrayObj
{
private:
   // some variables...
public:
   //constructor, destructor, getters, etc...
   friend void objManager::foo();
};
//...
class objManager
{
private:
   //...
   std::vector<std::shared_ptr<arrayObj>> array;
public:
   void foo();
   //other methods...
};

现在,按原样,我的编译器将找不到为朋友包含声明的objManager(或成员函数)的类声明。但是,如果将objManager声明放在arrayObj之前,则不再为共享指针的内部向量声明arrayObj。有没有办法在这个实例中转发声明objManager或以其他方式解决这个问题而不将objManager拆分成单独的类?

1 个答案:

答案 0 :(得分:2)

您需要转发声明arrayObj,然后填写objManager的完整定义,最后定义arrayObj

class arrayObj;

class objManager {
    std::vector<std::shared_ptr<arrayObj>> array; // OK, fwd-declare is fine for this

public:
    void foo();

    // etc.
};

class arrayObj {
public:
    friend void objManager::foo();
    // etc.
};

为了宣布一个朋友,必须已经看到了这种方法,所以必须先行。前向声明是向量的结果。