友元类的问题

lcftc 2003-01-24 10:19:08
我正在学c++,遇到了友元类,有点不懂,很郁闷.源程序如下;

#include<iostream.h>
class X
{
friend class Y;
public:
X(int xx){x=xx;}/*如果把这行去了的话是可以正常编译的.不去的话会出现"no appropriate default constructor available"的提示*/

private:
int x;
};

class Y
{
public:
Y(int x){a.x=x;}
void DisPlay(){cout<<a.x<<endl;}
private:
X a;
};



void main()
{
Y y(1);
y.DisPlay();
}

为什么会找不到合适的构造函数????要怎改啊?
...全文
54 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcftc 2003-01-24
  • 打赏
  • 举报
回复
这是我第一次发贴,没想到这么快就有回应了,谢谢大家了.我会支持CSDN的.
yellowwolf 2003-01-24
  • 打赏
  • 举报
回复
lifanxi(Byron) 说的最好。哈。。。大家做的更好,其实我认为学对于一个学的人给一定的提示会更好。
toybearcn 2003-01-24
  • 打赏
  • 举报
回复
用缺省参数也可以
#include<iostream.h>
class X
{
friend class Y;
public:
X(int xx=0){x=xx;}
private:
int x;
};

class Y
{
public:
Y(int x){a.x=x;}
void DisPlay(){cout<<a.x<<endl;}
private:
X a;
};



void main()
{
Y y(1);
y.DisPlay();
}
point_to 2003-01-24
  • 打赏
  • 举报
回复
class X
{
friend class Y;
public:
X(){x=2;}//加了一个缺省的构造函数,
X(int xx){x=xx;}

private:
int x;
};

class Y
{
public:
Y(int xx)
{
a.x=xx;//调用Y(90)时,必先调用X a,这个时候,如找不到不带任何参数的构造函数,就出现错误乐!
}
void DisPlay(){cout<<a.x<<endl;}
private:
X a;
};



void main()
{
Y y(90);
y.DisPlay();
}
danmao 2003-01-24
  • 打赏
  • 举报
回复
#include<iostream.h>
class X
{
friend class Y;
public:
X(int xx){x=xx;}/*如果把这行去了的话是可以正常编译的.不去的话会出现"no appropriate default constructor available"的提示*/
X(); // 重要!!道理如楼上老兄所说

private:
int x;
};

class Y
{
public:
Y(int x){a.x=x;}
void DisPlay(){cout<<a.x<<endl;}
private:
X a;
};



void main()
{
Y y(1);
y.DisPlay();
}
point_to 2003-01-24
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

class X
{
friend class Y;
public:
X(){x=2;}//加一个构造函数
X(int xx){x=xx
private:
int x;
};

class Y
{
public:
Y(int xx){a.x=xx;}
void DisPlay(){cout<<a.x<<endl;}
private:
X a;
};



void main()
{
Y y(1);
y.DisPlay();
}
lifanxi 2003-01-24
  • 打赏
  • 举报
回复
因为class Y中出现了X a;这一行,相当于要调用X类的默认构造函数,也就是那个不带参的构造函数。
但是你在X类中写了一个带参的构造函数,这样,编译器就不会自动合成不带参的构造函数了。
所以解决的方案就是在X类中重新写一个不带参的构造函数。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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