标题:友元问题 在执行的时候出现错误(DC++和VC++6.0)
只看楼主
winnie96
Rank: 2
等 级:论坛游民
帖 子:51
专家分:86
注 册:2015-12-14
结帖率:53.85%
已结贴  问题点数:20 回复次数:11 
友元问题 在执行的时候出现错误(DC++和VC++6.0)
#include<iostream>
#include<string.h>

using namespace std;

class person;
class spouse
{
    private:
        person *phusband;
        person *pwife;
    public:
        spouse(const person &hus,const person &wf);
        void Show()const;
        ~spouse(){
            delete phusband;
            delete pwife;
        }
        
        
};
class person
{
    private:
        char *name;
        int age;
        char sex[6];
    public:
        person(char *n,int a,char *s):age(a)
        {
            strcpy(name,n);strcpy(sex,s);
        }
        
        void Show()const{
            cout<<name<<""<<age<<sex<<endl;
        }
        friend void spouse::Show() const;
        
};
spouse::spouse(const person &hus,const person &wf)
{
    phusband=new person(hus);
    pwife=new person(wf);
   
}
void spouse::Show()const
{
    cout<<"丈夫:"<<phusband->name<<phusband->age<<phusband->sex<<endl;
    cout<<"妻子:"<<pwife->name<<pwife->age<<pwife->sex<<endl;
}
int main()
{
    person husband("张强",32,"男");
    person wife("吴珊",28,"女");
    spouse sp(husband,wife);
   
   
    wife.Show();
    husband.Show();
    sp.Show ();
    system("pause");
    return 0;
}
搜索更多相关主题的帖子: private include person public 
2016-03-22 13:46
牧羊人94
Rank: 2
等 级:论坛游民
帖 子:14
专家分:41
注 册:2016-3-17
得分:10 
只有当一个类的定义已经被看到时,它的成员函数才能被声明为另一个类的友元。
http://zhidao.baidu.com/link?url=Otw8jtx3VKUDBqGpFEDAuZ9dEVKLaBVL-L4ejDZsL4V8aMGqpn-9udtZ3E1LGebnZAgtmv2ooaEFEVENa94GeK
这网址里有说到的。但你的程序没那么简单,spouse类既要用到person类定义指针,所以需要spouse类在前面先声明person类,而这正好
与第一句话杠上了,所以才会有不可访问的问题。建议你把spouse类设为友元类就行了,我试过可行的。
(我也是个新手,刚学C++,所以上面说的只是我的个人想法,对不对还需要考证,哈哈……)
2016-03-22 17:33
winnie96
Rank: 2
等 级:论坛游民
帖 子:51
专家分:86
注 册:2015-12-14
得分:0 
回复 2楼 牧羊人94
friend void spouse::Show() const;
我把他改成friend class spouse;
但是仍然不行。
2016-03-22 21:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
這程序是幹什麽的?

授人以渔,不授人以鱼。
2016-03-22 21:23
winnie96
Rank: 2
等 级:论坛游民
帖 子:51
专家分:86
注 册:2015-12-14
得分:0 
回复 4楼 TonyDeng
这是我们教材上的代码,学习友元函数,。
2016-03-22 21:33
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:5 

授人以渔,不授人以鱼。
2016-03-22 21:35
luckhide
Rank: 5Rank: 5
来 自:青岛
等 级:职业侠客
帖 子:51
专家分:338
注 册:2016-3-19
得分:0 
友元函数干嘛的?什么情况下要用?一概不知,学习...
2016-03-22 22:04
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
以下是引用luckhide在2016-3-22 22:04:32的发言:

友元函数干嘛的?什么情况下要用?一概不知,学习...

當你感覺到有某種需要的時候,才會明白這玩意的用途。

授人以渔,不授人以鱼。
2016-03-22 22:33
luckhide
Rank: 5Rank: 5
来 自:青岛
等 级:职业侠客
帖 子:51
专家分:338
注 册:2016-3-19
得分:0 
回复 8楼 TonyDeng
嗯,也许吧。有实际需求,学习才最深刻!
2016-03-22 22:43
牧羊人94
Rank: 2
等 级:论坛游民
帖 子:14
专家分:41
注 册:2016-3-17
得分:5 
回复 3楼 winnie96
#include "stdafx.h"
#include<iostream>
#include<string.h>
using namespace std;

class person;
class spouse
{
private:
    person *phusband;
    person *pwife;
public:
    spouse(const person &hus, const person &wf);
    ~spouse();
    void Show() const;
};

class person
{
private:
    char name[10];
    int age;
    char sex[6];
public:
    person(char *n, int a, char *s)// :age(a)
    {
        strcpy_s(name, n);
        age = a;
        strcpy_s(sex, s);
    }

    void Show()const{
        cout << name << "" << age << sex << endl;
    }
    friend class spouse;
    //friend void spouse::Show() const;
};
spouse::spouse(const person &hus, const person &wf)
{
    phusband = new person(hus);
    pwife = new person(wf);
}
void spouse::Show() const
{
   
    cout << "丈夫:" << phusband->name << phusband->age << phusband->sex << endl;
    cout << "妻子:" << pwife->name << pwife->age << pwife->sex << endl;
}
spouse::~spouse(){
    delete phusband;
    delete pwife;
}
int main()
{
    person husband("张强", 32, "男");
    person wife("吴珊", 28, "女");
    spouse sp(husband, wife);

    wife.Show();
    husband.Show();
    sp.Show();
    system("pause");
    return 0;
}

我试过可以的啊。
2016-03-22 23:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-462773-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021953 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved