当前位置: 代码迷 >> C++ >> [Help]C++访问权限的有关问题
  详细解决方案

[Help]C++访问权限的有关问题

热度:2662   发布时间:2013-02-26 00:00:00.0
[Help]C++访问权限的问题
C++要求在使用一个类型时必须见到它的声明,但在定义变量时必须看见整个类型的定义对吧?
那么
    struct X;
    void f(X x){} //是不被允许的
    //但是
    struct Y{
        void f1(X x);//不报错
    };//是不是只要在使用(定义)X的时候,编译器已经看见X的定义就行
//而在声明的时候是不要紧的?

还有 struct中
struct A{
private:
int i;
public:
struct B;
friend struct B;//书上说必须这样写(声明B为友元),B本身不会自动被允许访问 A的private成员
//可是我把上两行去掉了同样不报错,还有,书上说 声明了struct B;就可以用 friend B;声明友元但
//我测试失败,不写上 struct 就会报错
struct B{
A* x;
void f(){x->i=10;}//这里引用了A的私有成员
};
};
//注:我所说的书是《Thinking in C++ volume1》
c++ struct 访问权限

------解决方案--------------------------------------------------------
struct B;不是声明么?
先声明后定义是可以的。

struct是关键字。
而friend关键字声明友元类的语法是friend class somename;
友元可以访问类中的私有域。

至于void f(){x->i = 10;},你在struct A的public中定义结构B以及B的成员函数f(),那么f()应该算是A的成员函数了。你可以试下去掉friend看看
------解决方案--------------------------------------------------------
    struct X;
    void f(X x){} //是不被允许的, 因为f已经有实现"{}", 编译器要确定X的定义才能分配参数的栈内存分配和初始化/析构等
    //但是
    struct Y{
        void f1(X x);//允许, 因为只是声明, 没有定义. 


第二个问题没看明白你的意思.
  相关解决方案