可能有一个非常简单的修复方法,但目前让我感到困惑。所以,我正在编写 C++ 类以达到以下效果:
标题.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 之前,因此不再为共享指针的内部 vector 声明 arrayObj。有没有办法在这个实例中转发声明 objManager 或以其他方式解决这个问题而不将 objManager 分解为单独的类?
最佳答案
您需要转发声明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.
};
为了声明一个 friend ,那个方法必须已经被看到,所以它必须先行。前向声明是 vector 的结果。
关于c++ - 没有类声明的友元成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27072692/