写了两个类的点.h文件,第一个定义一个成员函数,在第二个类中声明为友元函数,编译的提示提示未定义!

baidu_18644381 2014-07-30 10:16:31

Boy.h
class Girl;
class Boy
{
​public:
Boy();
Boy(char *n,int a);
void Disp(Girl &s);
virtual ~Boy();
private:
char *name;
int age;
};

Girl.h
class Boy;
class Girl
{
public:
Girl();
Girl(char *n,int a);
friend void Boy::Disp(Girl &s);
virtual ~Girl();
private:
char *name;
int age;
};
...全文
248 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_18644381 2014-07-31
  • 打赏
  • 举报
回复
引用 8 楼 baidu_18644381 的回复:
[quote=引用 5 楼 lovesmiles 的回复:] [quote=引用 4 楼 baidu_18644381 的回复:] [quote=引用 3 楼 Idle_ 的回复:] [quote=引用 楼主 baidu_18644381 的回复:] ... Girl.h class Boy; class Girl { public: Girl(); Girl(char *n,int a); friend void Boy::Disp(Girl &s); virtual ~Girl(); private: char *name; int age; };
class boy在girl.h中的具体声明呢? (在你没有#include "boy.h"的情况下) [/quote]有声明,如果声明为友元类,就能通过编译[/quote] 把CPP文件和编译错误发上来看看。没发现你上面的代码有什么问题。[/quote]麻烦看看问题在哪里[/quote] Girl.cpp Girl::Girl() { ; } Girl::Girl(char *n,int a) { name = new char[strlen(n)+1]; strcpy(name,n); age = a; } void Boy::Disp(Girl &s) { cout<<s.age<<" "<<s.name<<endl; } Girl::~Girl() { delete []name; } Boy.cpp Boy::Boy() { ; } Boy::Boy(char *n,int a) { name = new char[strlen(n)+1]; strcpy(name,n); age = a; } Boy::~Boy() { delete []name; }
baidu_18644381 2014-07-31
  • 打赏
  • 举报
回复
引用 5 楼 lovesmiles 的回复:
[quote=引用 4 楼 baidu_18644381 的回复:]
[quote=引用 3 楼 Idle_ 的回复:]
[quote=引用 楼主 baidu_18644381 的回复:]

...
Girl.h
class Boy;
class Girl
{
public:
Girl();
Girl(char *n,int a);
friend void Boy::Disp(Girl &s);
virtual ~Girl();
private:
char *name;
int age;
};


class boy在girl.h中的具体声明呢? (在你没有#include "boy.h"的情况下)

[/quote]有声明,如果声明为友元类,就能通过编译[/quote]
把CPP文件和编译错误发上来看看。没发现你上面的代码有什么问题。[/quote]麻烦看看问题在哪里
勤奋的小游侠 2014-07-30
  • 打赏
  • 举报
回复
引用 4 楼 baidu_18644381 的回复:
[quote=引用 3 楼 Idle_ 的回复:] [quote=引用 楼主 baidu_18644381 的回复:] ... Girl.h class Boy; class Girl { public: Girl(); Girl(char *n,int a); friend void Boy::Disp(Girl &s); virtual ~Girl(); private: char *name; int age; };
class boy在girl.h中的具体声明呢? (在你没有#include "boy.h"的情况下) [/quote]有声明,如果声明为友元类,就能通过编译[/quote] 把CPP文件和编译错误发上来看看。没发现你上面的代码有什么问题。
baidu_18644381 2014-07-30
  • 打赏
  • 举报
回复
引用 3 楼 Idle_ 的回复:
[quote=引用 楼主 baidu_18644381 的回复:] ... Girl.h class Boy; class Girl { public: Girl(); Girl(char *n,int a); friend void Boy::Disp(Girl &s); virtual ~Girl(); private: char *name; int age; };
class boy在girl.h中的具体声明呢? (在你没有#include "boy.h"的情况下) [/quote]有声明,如果声明为友元类,就能通过编译
阿呆_ 2014-07-30
  • 打赏
  • 举报
回复
引用 楼主 baidu_18644381 的回复:
... Girl.h class Boy; class Girl { public: Girl(); Girl(char *n,int a); friend void Boy::Disp(Girl &s); virtual ~Girl(); private: char *name; int age; };
class boy在girl.h中的具体声明呢? (在你没有#include "boy.h"的情况下)
baidu_18644381 2014-07-30
  • 打赏
  • 举报
回复
引用 1 楼 swgshj 的回复:
friend void Boy::Disp(Girl &s)要在类Gril的定义之后定义,你定义了吗?在哪里定义的? 类的定义顺序: 1)定义类Boy并声明Disp()函数 2)定义类Gril,指定Boy::Disp()为其友元 3)定义Boy::Disp()
类的成员函数都在.CPP中定义的!在Girl类中,声明为friend boy,就没问题!
梦想照旧实现 2014-07-30
  • 打赏
  • 举报
回复
friend void Boy::Disp(Girl &s)要在类Gril的定义之后定义,你定义了吗?在哪里定义的? 类的定义顺序: 1)定义类Boy并声明Disp()函数 2)定义类Gril,指定Boy::Disp()为其友元 3)定义Boy::Disp()
baidu_18644381 2014-07-30
  • 打赏
  • 举报
回复
引用 6 楼 swgshj 的回复:
对比一下你的代码。

#ifndef _BOY_H
#define _BOY_H
//Boy.h
class Girl;
class Boy  
{
    public:
        Boy();
        Boy(char *n,int a); 
        void Disp(Girl &s);
        //virtual ~Boy();
    private:
        char *name;
        int age;
};
#endif
#include <stdio.h>
#include "Boy.h"

Boy::Boy()
{
    name = NULL;
    age  = 0;
}

Boy::Boy(char *n,int a)
{
    name = n;
    age = a;
}
#ifndef _GIRL_H
#define _GIRL_H

//Girl.h
class  Boy;
class Girl  
{
    public:
        Girl();
        Girl(char *n,int a); 
        friend void Boy::Disp(Girl &s);
        //virtual ~Girl();
    private:
        char *name;
        int age;
};

#endif
#include <stdio.h>
#include "Boy.h"    //Must inlude begore Girl.h
#include "Girl.h"

Girl::Girl()
{
    name = NULL;
    age = 0;
}

Girl::Girl(char *n,int a)
{
    name = n;
    age = a;
}

void Boy::Disp(Girl &s) 
{
    printf("girl name=%s, age=%d\n", s.name, s.age);
}
//Main.cpp
#include <stdio.h>
#include "Boy.h"
#include "Girl.h"

int main()
{
    Girl girl((char*)"Lily", 20);
    Boy boy;

    boy.Disp(girl);

    return 0;
}
g++ Main.cpp Girl.cpp Boy.cpp ./a.out girl name=Lily, age=20
非常感谢,也许是我的编程工具有问题!我下载的是简洁版的,我下载一个完整版的试试!
梦想照旧实现 2014-07-30
  • 打赏
  • 举报
回复
对比一下你的代码。

#ifndef _BOY_H
#define _BOY_H
//Boy.h
class Girl;
class Boy  
{
    public:
        Boy();
        Boy(char *n,int a); 
        void Disp(Girl &s);
        //virtual ~Boy();
    private:
        char *name;
        int age;
};
#endif
#include <stdio.h>
#include "Boy.h"

Boy::Boy()
{
    name = NULL;
    age  = 0;
}

Boy::Boy(char *n,int a)
{
    name = n;
    age = a;
}
#ifndef _GIRL_H
#define _GIRL_H

//Girl.h
class  Boy;
class Girl  
{
    public:
        Girl();
        Girl(char *n,int a); 
        friend void Boy::Disp(Girl &s);
        //virtual ~Girl();
    private:
        char *name;
        int age;
};

#endif
#include <stdio.h>
#include "Boy.h"    //Must inlude begore Girl.h
#include "Girl.h"

Girl::Girl()
{
    name = NULL;
    age = 0;
}

Girl::Girl(char *n,int a)
{
    name = n;
    age = a;
}

void Boy::Disp(Girl &s) 
{
    printf("girl name=%s, age=%d\n", s.name, s.age);
}
//Main.cpp
#include <stdio.h>
#include "Boy.h"
#include "Girl.h"

int main()
{
    Girl girl((char*)"Lily", 20);
    Boy boy;

    boy.Disp(girl);

    return 0;
}
g++ Main.cpp Girl.cpp Boy.cpp ./a.out girl name=Lily, age=20

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧