ChiLi_Lin 2018-01-16 09:51 采纳率: 60%
浏览 1312
已结题

C++ 函数重复声明时,添加默认实参问题。

在原书《C++ Primer 5th》中(P212),如下写到:在原有默认值的下,添加其他默认值是正确的声明。
图片说明


但是在测试时,编译器(vs2015)却报错了。
图片说明


执行程序时,可以正确执行,但是还是会输出这个错误。

void screen(int w, int h, string s) { cout << (w * h) << " " + s; }

void screen(int w, int h, string s = "stringgggg");

void screen(int w = 32, int h = 16, string s);

void main()
{
    screen();
}

输出结果:
512 stringgggg

请问为什么报错?怎么解决?

  • 写回答

10条回答 默认 最新

  • IT小狼狗 2018-01-16 10:18
    关注

    编译出错了 还能正确执行? 你这个是启动上一次成功的实例的结果吧,

    评论
  • 星河scorpion 2018-01-16 11:18
    关注

    因为你的默认实参位置写错了,默认实参必须先满足最右边的再依次往左走,第三个函数最右边的string必须写默认实参,因为它左边的都有实参了,右边的必须也要有,成功的话,忘采纳我的意见

    评论
  • zxcv1234bnm5678 2018-01-17 00:07
    关注

    默认实参位置写错了,函数传参顺序从右到左

    评论
  • 仲宇 2018-01-17 11:54
    关注

    这样应该没有错误。这个错误提示不是编译时输出的吧?是不是助手之类的提示错误?

    评论
  • xiaoxiaozeyu. 2018-01-18 01:57
    关注

    你重载的最后一个screen()在string s后面再加一个默认

    评论
  • 古月光军001 2018-01-18 13:15
    关注

    出现有红色下划线并不表示就一定是错误,主要还是看编译以后是不是报错

    评论
  • ChiLi_Lin 2018-01-21 17:03
    关注

    有没有人试一试?再告诉我是不是只有我的编译器(VS2015)是这样。

    评论
  • 百无一用狂书生 2018-01-25 01:17
    关注

    第三个函数的参数默认值不能这样给。 如果一个函数中有多个默认参数,则形参分布中,默认参数应从右至左逐渐定义。

    评论
  • 从零到一万物起源 2018-01-25 12:58
    关注

    图片说明真的能运行哦

    评论
  • 007havegone 2018-11-09 01:11
    关注

    我用devc++和vs2017都测试了下,都会显示添加参数那条没有把默认参数写在最右边,可能这个特性不是所有编译器都支持吧

    评论

报告相同问题?

悬赏问题

  • ¥15 matlab有svec这个函数吗?
  • ¥15 无法调用VideoWriter_fourcc
  • ¥15 VB6.0无法加载网页验证码图片到picturebox中,求解。
  • ¥15 C#和GDAL对栅格处理
  • ¥15 我现在有一些关于提升机故障的专有文本数据,量也不多,我在label studio上进行了关系和实体的标注,完成了知识图谱的构造,那么我使用生成式模型的话,我能做哪些工作来写我的论文?
  • ¥15 电脑连不上无线网络如下诊断反馈应该如何操作
  • ¥15 telegram api 使用forward_messages方法转发消息时,目标群组里面会出现此消息来源,如何隐藏?
  • ¥15 关于#tensorflow#的问题:有没有什么方法可以让机器自己学会像素风格的图片
  • ¥15 Oracle触发器字段变化时插入指定值
  • ¥15 docker无法进入容器内部