C++ C++;无用友元函数声明
我声明了一个friend函数,它位于:C++ C++;无用友元函数声明,c++,oop,friend,C++,Oop,Friend,我声明了一个friend函数,它位于: // user-proc.h class cregister{ private: levy user; // typedef struct int testp; public: friend void test(); cregister(levy &tmp); levy getUser(); void displayUser(levy &); }; 然后我将其定义为: // user-proc.cpp void
// user-proc.h
class cregister{
private:
levy user; // typedef struct
int testp;
public:
friend void test();
cregister(levy &tmp);
levy getUser();
void displayUser(levy &);
};
然后我将其定义为:
// user-proc.cpp
void test()
{
cout << "test" << endl;
}
//user-proc.cpp
无效测试()
{
cout您需要有两个声明:一个普通函数原型声明,另一个在类中作为友元声明
看起来这里声明了两个test()
函数;一个在类中,另一个(带定义)在cpp文件中
仅在类中声明的test()
实际上只能通过ADL访问,而这在这里不起作用,因为它不接受类类型的参数
在类定义之前添加一个声明void test();
,应该使类的内部结构在test
函数中可用
// user-proc.h
void test();
class cregister{
// redacted...
public:
friend void test();
};
虽然test()
可以访问此处的私有成员,但除非它声明要使用的类的实例(有效对象),否则该函数不会太有用。考虑为该函数添加一个参数,例如void test(cregister&arg);
(这里ADL将起作用)。我推断此处的函数是专门用于测试的,因此上述内容可能不适用,但在一般情况下,它可能会有用。或者,必须向main
提供声明。test()的定义
在main
之前,在同一个翻译单元中也可以。您能解释一下吗,我试图声明2个函数,第一个在类中,另一个在user proc.h中,但它不能访问私有成员?@juanchopanza我在main函数之前定义,它仍然不能访问私有成员。@SashaValentine更新了answe我对此表示严重怀疑。
// user-proc.h
void test();
class cregister{
// redacted...
public:
friend void test();
};