gpt4 book ai didi

c++ - 没有类声明的友元成员函数

转载 作者:行者123 更新时间:2023-11-30 03:59:12 24 4
gpt4 key购买 nike

可能有一个非常简单的修复方法,但目前让我感到困惑。所以,我正在编写 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com