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

帮小弟看一下,到底是那里出了问题?

Union 发布于 2010-09-05 22:44, 813 次点击
我试了好久都有问题,编译不能通过,说无法访问point类中的a和c。望各位帮指正、
#include<iostream>
using namespace std;
class sh;
class point
{
private:
    int a;
public:
    int b;
    point(int pa,int pc)
    {
        a=pa;
        c=pc;
    }
    friend void sh::showp(point &);
protected:
    int c;
};
class sh
{
private:
    int s;
public:
    void showp(point &);
};
void sh::showp(point &bo)
{
    cout<<bo.a<<"\t"<<bo.c<<endl;
}
int main()
{
    point bo(29,89);
    bo.showp(bo);
    return 0;
}
8 回复
#2
hahayezhe2010-09-06 10:41
在class point 加个 friend class sh;
 friend void sh::showp(point &); 你想干什么?在类的模块里声明其他类的函数?
#3
南国利剑2010-09-07 00:27
friend void sh::showp(point &);
这个语句明显会出错。
因为class sh的定义不完整的时候,你不能够在另一类中涉及到它的细节。
你只能在前向引用的情况下,声明一个sh的对象的引用或者指针。绝对不能够涉及未完全定义的类的细节问题。否则编译必定报错。
#4
x_wangyue2010-09-09 21:52
a属于private,b属于protected,在类外都不可以访问,所以编译报错
#5
dongfanliang2010-09-10 11:14
你这个有点混乱。。。。
#6
ltyjyufo2010-09-10 18:29
  很基本的定义问题。
#7
hipwang882010-09-12 22:06
有点像鸡与蛋的问题,编程不规范
#8
laoyang1032010-09-12 22:25
2楼说的很对
#9
C之家2010-09-15 21:35
point bo(29,89);
    bo.showp(bo);
bo是point类的对象,而程序中sh是point的友员函数,这并不意味着point是sh的友员函数,所以bo不能访问showp函数,
friend void sh::showp(point &);
这句也有问题,虽然你在开头提前声明了类sh,但这里涉及到了sh的具体定义,除非是指针,否则不能这么使用
1