注册 登录
编程论坛 C++教室

为什么友元访问基类静态保护成员时,不能使用成员名限定方法访问?

全世界安静 发布于 2012-07-18 14:28, 2093 次点击
#include <iostream>
using namespace std;
class A{
protected:
    static int a,b;
};
int A::a=1,A::b=2;
class C:public A{
    int m;
public:
    friend class F;
    C(int p){
        m=p;
    }
};
class F{
public:
    void func(){
        cout<<A::a <<endl;
    }
};

int main(){
    C c(100);
    F f;
    f.func();
    return 0;
}
error C2248: 'a' : cannot access protected member declared in class 'A'
10 回复
#2
全世界安静2012-07-18 14:35
是因为友元没有this指针的缘故吗?
#3
小小珊玉2012-07-18 17:34
静态成员是属于类的,应该先访问类,在访问成员,一层一层。
#4
rjsp2012-07-19 08:19
换编译器
#5
shapoo2012-07-19 10:41
3楼正解
#6
全世界安静2012-07-19 11:04
回复 4楼 rjsp
是编译器的问题?我是看书上这么说的
#7
rjsp2012-07-19 12:09
以下是引用全世界安静在2012-7-19 11:04:05的发言:

是编译器的问题?我是看书上这么说的
^_^你那破书怎么说的
#8
全世界安静2012-07-19 14:15
回复 7楼 rjsp
"......友元访问基类静态保护成员时,不能使用成员名限定方法......."
我在VC6上一试,还真这样
#9
哈哥2012-07-19 20:32
我记得友元类不能继承吧……
#10
pangding2012-07-19 22:15
楼主看的是什么书?
#11
pangding2012-07-19 22:20
楼主应该至少有这么一个常识:不能用 vc6 来验证 C++ 语言的性质。尤其是有关有友,多态之类的这堆纯 C++ 的东西。vc6 有很多几乎就不是按照 C++ 的行为实现。
1