gpt4 book ai didi

c++ - 将友元授予来自不同 header 中定义的类的函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:54:37 25 4
gpt4 key购买 nike

首先,这不是“作业”,它是 Thinking in C++ Vol 1, chapter 5 ex 5 中的一个问题。我需要创建 3 个类,第一个类将其内部结构的友元授予整个第二个类,而友元仅授予第三个类的一个函数。

我对授予整个第二类的友元没有问题,但是对于授予第三类功能,如果我在同一个标​​题中声明第三类则没有问题。但是在不同的标题中,我得到了一些未定义的类型/声明。感谢您的帮助,这是代码:

#ifndef FIRSTCLASS_H
#define FIRSTCLASS_H

//firstclasss header file

#include "secondclass.h"
#include "thirdclass.h"

class secondclass; //dummy declaration so it can share friendship
class thirdclass; //it doesnt work when i want to give friendship to a function

class firstclass{
private:
int a;
int b;
public:
friend secondclass; //granting friendship to the whole class
friend void thirdclass::z(firstclass *); //error
//use of undefined type 'thirdclass'
//see declaration of 'thirdclass'

};

#endif FIRSTCLASS_H



#ifndef THIRDCLASS_H
#define THIRDCLASS_H

//thirdclass header file

#include "firstclass.h"

class firstclass;

class thirdclass{
public:
void z(firstclass *);
};

#endif THIRDCLASS_H

最佳答案

仅当不包含相应类的 header 时才需要提供前向声明。由于您已经包含了 secondclass.hthirdclass.h,因此您应该完全跳过相应的前向声明。

但是,在 thirdclass.h 中,您不需要 firstclass.h:您声明了一个指向 firstclass 的指针,而不是使用它的成员,所以你不需要包含。

一般规则是,如果您只需要一个指针,您应该前向声明您的类,并在您需要类成员的知识时包含它们的标题。

关于c++ - 将友元授予来自不同 header 中定义的类的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11813568/

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