对此可能有一个非常简单的解决办法,但目前令我难以置信。所以,我正在编写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拆分成单独的类?
答案 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.
};
为了宣布一个朋友,必须已经看到了这种方法,所以必须先行。前向声明是向量的结果。