当我声明一个朋友时,g ++编译器会抱怨这个错误:
friend MyClass;
Run Code Online (Sandbox Code Playgroud)
代替
friend class MyClass;
Run Code Online (Sandbox Code Playgroud)
为什么要使用class关键字?(Borland C++编译器,BTW,不需要它.)
难道编译器不能简单地在符号表中查找MyClass并告诉它被声明为一个类吗?(显然它正在进行查找,因为它在没有声明MyClass时会抱怨)
它不像是在进行类的前向声明:我仍然必须要么声明上面的类,要么至少要向前声明它.
这对我来说是有道理的(实际上会很棒)
friend class MyClass;
Run Code Online (Sandbox Code Playgroud)
如果需要,我会做出前瞻性声明,否则它对我来说就像是语法上的盐.
我已经愉快地使用没有class或struct关键字的friend语句,近20年没有编译器投诉.这是一个相当新的东西吗?
有谁知道为什么类名的typedef不像朋友声明的类名那样工作?
class A
{
public:
};
class B : public A
{
public:
typedef A SUPERCLASS;
};
typedef A X;
class C
{
public:
friend class A; // OK
friend class X; // fails
friend class B::SUPERCLASS; // fails
};
Run Code Online (Sandbox Code Playgroud)