struct A {};
typedef A B;
struct C { friend struct B; };
GCC 4.7.0 20110427告诉我error: using typedef-name 'B' after 'struct'
。
到目前为止,这看起来非常明显;毕竟,我的示例代码试图声明一个名为B的struct
,这实际上不是struct-key
。
但是,如果friend struct A;
实际上是一个复杂的,长篇大论的模板元混乱,我必须写A
,这是不可取的。
我错过了什么,或者我们实际上不 friend
类型通过类型别名?如果没有,是否有任何特殊原因,或者只是语言的怪癖?
This question之前提出过这个问题,但是已经过时并且对C ++ 0x的问题做出了断言,这看似不真实。 这个问题代替了C ++ 0x FDIS。
答案 0 :(得分:11)
你可以成为任意类型的朋友(对于非类类型,朋友声明将被忽略),但是你应该省略struct
:
struct A {};
typedef A B;
struct C {
friend B; // equivalent: friend struct A;
// equivalent: friend A;
friend int; // ignored
};
答案 1 :(得分:-1)
与友谊无关:
struct A {};
typedef A B;
struct B b;
是错误,因为B已经是结构。