免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1893 | 回复: 8
打印 上一主题 下一主题

无法进行类型转换的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-11 13:40 |只看该作者 |倒序浏览
代码如下,编译时的提示是:cannot convert from 'const Rock' to 'Rock'。为什么需要类型转换?
编译器是vs.net2003

#include <iostream>
#include <vector>

using namespace std;


class Rock{
public:
      Rock(){
            cout<<"Rock()"<<endl;
      }

      Rock( Rock&){
            cout<<"Rock(Rock&)"<<endl;
      }

      Rock& operator=(const Rock&)

      {
            cout<<"Rock& operator=(Rock&)"<<endl;
            return *this;
      }

      ~Rock()
      {
            cout<<"~Rock()"<<endl;
      }

};


main()

{
      Rock r1;
      Rock r2;
      Rock r3;

      vector<Rock> vr;

      vr.push_back(r1);
      //vr.push_back(r2);
      //vr.push_back(r3);

}

论坛徽章:
0
2 [报告]
发表于 2007-10-11 13:43 |只看该作者
gcc编译这种程序时会给出警告,但不做为error

论坛徽章:
0
3 [报告]
发表于 2007-10-11 14:43 |只看该作者
什么样的警告? 为什么这里会出现问题。

论坛徽章:
0
4 [报告]
发表于 2007-10-11 14:48 |只看该作者
原帖由 user2003 于 2007-10-11 14:43 发表
什么样的警告? 为什么这里会出现问题。

因为对const声明的变量修改是实现相关的,前面有个帖子在讨论这个问题。

论坛徽章:
0
5 [报告]
发表于 2007-10-11 18:01 |只看该作者
问题是这里为什么会有类型转换的问题, push_back()函数的参数一定要const吗?

论坛徽章:
0
6 [报告]
发表于 2007-10-11 18:45 |只看该作者
原帖由 cugb_cat 于 2007-10-11 14:48 发表

因为对const声明的变量修改是实现相关的。


错了就是错了。所谓的实现相关在这里不过是说可能会走狗屎运。

问题是这里为什么会有类型转换的问题, push_back()函数的参数一定要const吗?

问题应该是出在

  1. Rock( Rock&){
  2.             cout<<"Rock(Rock&)"<<endl;
  3.       }
复制代码


参数应该带 const:

  1. Rock(const Rock&){
  2.             cout<<"Rock(Rock&)"<<endl;
  3.       }
复制代码

论坛徽章:
0
7 [报告]
发表于 2007-10-11 21:20 |只看该作者
多谢lgfang指出。

论坛徽章:
0
8 [报告]
发表于 2007-10-12 15:08 |只看该作者
多谢解答。
问题又出在无视函数参数、返回值类型这样的问题上。
zhangzhangg 该用户已被删除
9 [报告]
发表于 2007-10-12 16:10 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP