gpt4 book ai didi

c++ - 友元函数的作用域

转载 作者:太空宇宙 更新时间:2023-11-04 15:24:13 25 4
gpt4 key购买 nike

我有两个类,一个两个,每个类都有一个 friend 成员函数和一个指向另一个的指针。第一个头文件如下:

#ifndef FIRSTCLASS_H
#define FIRSTCLASS_H

class two;

class one {

private:
int one_data;

public:
friend void second_data (two *);
};

#endif

第二个头文件如下所示:

#ifndef SECONDCLASS_H
#define SECONDCLASS_H

class one;

class two {

private:
int two_data;

public:
friend void first_data (one *);
};

#endif

实际函数在第三个 .cpp 文件中。我用适当的类限定符编写了函数,它给出了编译错误。我正在使用 g++。功能如下:

#include "firstclass.h"
#include "secondclass.h"

void two::first_data (one * class1) {

}

void one::second_data (two * class2) {

}

错误如下:

 error:no ‘void two::first_data (one*)’ member function declared in class ‘two’ 
error: no ‘void one::second_data(two*)’ member function declared in class ‘one’

当我在函数名之前删除类限定符时,代码会编译。修改后的功能如下:

 void first_data(one * class1) {

}

void second_data(two * class2) {

}

我是 c++ 的新手,我不确定在第一种情况下我是否做错了什么。请赐教。

最佳答案

您声明的是作为类的友元的独立函数。
他们实际上不是任何类(Class)的成员。

friend void first_data (one *); 

声明一个独立的函数 first_data 作为你类的友元,这并不意味着 first_data 是你类的成员函数。因此,当您在 cpp 文件中定义该函数时,编译器会提示该函数从未声明过。

此外,

void two::first_data (one * class1){}

Returntype ClassName ScopeResolution FunctionSignature

two:: 告诉编译器函数属于这个特定的类,它不是命名空间规范,而是类限定。

关于c++ - 友元函数的作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12673352/

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