C++ C++;无用友元函数声明

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

我声明了一个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 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();
};