为什么会编译报错呢?

sq20121989 2012-03-11 11:07:27
下面的代码中
B(& k)这个构造函数为甚么只能按引用方式来传递对象参数,而用按值的方式却编译报错??


#include<iostream>
using namespace std;
class A
{
public:
A()
{

}
A(int aa)
{
a=aa;
}
private:
int a;
};

class B
{
public:
B()
{
a=0;
b=0;
c=0;
}
B(int aa,int bb) : a(aa),b(bb),c(aa-bb)
{

}


B(B &k)
{
a=k.a;
b=k.b;
c=k.a-k.b;
}



void printf()
{
cout<<a<<""<<b<<""<<c<<""<<endl;
}
private:
int a;
int b;
int c;
A d;
};


int main()
{
B a,b(1,2);
B x=a,y(b),z(2,1);
a.printf();
b.printf();
x.printf();
y.printf();
z.printf();
return 0;
}
...全文
146 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
oniisama 2012-03-11
  • 打赏
  • 举报
回复
因为B的定义内部不能定义B类型的变量,因为编译器这时候找不到B的完整定义,但B类型的引用或者指针就可以
李荣强 2012-03-11
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
class A
{
public:
A()
{
}
A(int aa)
{
a=aa;
}
private:
int a;
};
class B
{
public:
B()
{
a=0;
b=0;
c=0;
}
B(int aa,int bb) : a(aa),b(bb),c(aa-bb)
{

}

B(B &k)
{
a=k.a;
b=k.b;
c=k.a-k.b;
}
void printf()
{
cout<<a<<" "<<b<<" "<<c<<" "<<endl;
}
private:
int a;
int b;
int c;
A d;
};
int main()
{
B a,b(1,2);
B x=a,y(b),z(2,1);
a.printf();
b.printf();
x.printf();
y.printf();
z.printf();
return 0;
}这个代码没问题啊,是你的编译器有问题吧我vs2008成功通过


PunWinger 2012-03-11
  • 打赏
  • 举报
回复
你那个定义的是copy construct函数,按值的话传参数也要调用自己,那就是无限递归
  • 打赏
  • 举报
回复
因为此时类型B还是个不完整的类型,如果定义对象而不是引用的话,需要知道B类型的大小,现在B是个不完整的类型,无法知道其大小,就只能使用引用或指针,而指针或引用不需要知道其大小
oniisama 2012-03-11
  • 打赏
  • 举报
回复
按值传递的话,需要知道B类型的大小。B类型的定义不确定,就无法判断B类型的大小,而传递指针和引用就不需要知道B类型的大小。
sq20121989 2012-03-11
  • 打赏
  • 举报
回复
那为什么按引用方式就不会无限递归??
内容概要:本文系统研究了在强弱电网适配场景下,构网型(GFM)与跟网型(GFL)逆变器并联系统的协同控制逻辑及其暂态动态行为,重点依托Simulink仿真平台构建混合并网系统模型,深入分析两类逆变器在不同电网强度条件下的交互特性、频率响应机制、稳定性表现及抗扰能力。研究涵盖分层控制架构设计、异构控制策略对比、频率扰动响应规律以及多工况暂态性能评估,探讨了GFM与GFL逆变器在功率支撑、电压频率调节和系统稳定性方面的互补性与协同机制,旨在提升高比例新能源接入背景下并网系统的适应性、鲁棒性与动态性能。; 适合人群:具备电力电子、新能源并网、自动控制或电力系统仿真等相关专业知识背景,从事新型电力系统控制、微电网运行、逆变器控制策略研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解构网型与跟网型逆变器在强弱电网中的协同工作机理与动态交互特性;②掌握异构逆变器并联系统的建模方法、协同控制策略设计与暂态仿真分析流程;③为高渗透率新能源系统的稳定性分析、控制优化及工程应用提供理论依据和技术参考。; 阅读建议:建议结合Simulink仿真实例进行动手实践,重点关注控制策略的实现细节、参数整定方法及多工况仿真结果的动态响应分析,同时可参考文中提及的相关博士论文复现案例以深化对理论机制的理解。

65,213

社区成员

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

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