C++无用友函数声明
C++ Useless Friend Function Declaration
好吧,我声明了一个朋友函数,它位于:
// 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;
}
我试图调用main函数,但它告诉我它并没有在这个范围内声明。我做了一些研究,但我发现,他们说朋友类型并不完全是声明,你也必须在类外定义它。我试过了,然后正常情况下错误消失了,但碰巧朋友功能无法访问私人成员。
EDIT:我使用了void test();在类定义之前,并使用对象访问私有成员。它就这样解决了
您需要有两个声明:一个是普通函数原型声明,另一个在类中作为友元声明。
// user-proc.h
void test(); // Added prototype
class cregister{
private:
levy user; // typedef struct
int testp;
public:
friend void test(); // Friend declaration still here
cregister(levy &tmp);
levy getUser();
void displayUser(levy &);
};
这里似乎声明了两个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会起作用)。我推断这里的函数是专门用于测试的,所以上面的内容可能不适用,但在一般情况下它可能有用。
相关文章:
- C++:为什么允许在另一个函数中声明函数,而不允许在函数定义中声明?
- 在c++中在类外声明函数有什么好处
- 使用 #define 声明函数
- 在静态库中声明函数,在使用该相同库的应用程序中定义它
- 如何强制编译器在 C/C++ 本身中声明函数?
- 如果您只需要在 .h 文件中声明函数.cpp是否需要在 .h 文件中声明函数?
- C++:<sys/sysctl.h> 无法声明函数CTL_HW和HW_NCPU
- 尝试声明函数的局部变量,但得到范围错误
- 如何在C++模板中声明函数
- 如何在另一个文件的类中声明函数
- 使用非类型模板参数正向声明函数模板
- 在此范围错误中未声明函数错误
- 当我们不能声明函数内联(GCC 编译器)时?
- 未在此作用域中声明函数,即使存在头文件也是如此
- 无法声明函数中的模板类型别名
- 单个CPP文件中多次声明函数声明可以吗?
- 编译一个支持VBA中声明函数的dll
- 使用从外部参数包中获取的参数类型声明函数
- 使用类成员正确地声明函数
- 在函数内重新声明函数