| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 668 人关注过本帖
标题:最近刚学c++,有个小疑问
只看楼主 加入收藏
绿茶盖儿
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:363
专家分:1852
注 册:2011-9-3
结帖率:84.62%
收藏
已结贴  问题点数:20 回复次数:2 
最近刚学c++,有个小疑问
程序代码:
#include <iostream>
using namespace std;
class R
{
    public:
        R(int r1,int r2) {R1 = r1; R2 = r2;}
        R(R &r);
        ~ R() {}
        void print();
        void print() const;
    private:
        int R1,R2;
};

void R::print()
{
    cout<<R1<<":"<<R2<<endl;
}

R::R(R &r)
{
    R1 = r.R1;
    R2 = r.R2;
}

void R::print() const
{
    cout<<R1<<";"<<R2<<endl;
}

int main()
{
    R a(5,4);
    a.print();
    R const b(20,52);
    b.print();
    R aa(a);
    aa.print();
    R bb(b);      //这个地方有错误
    bb.print();
    return 0;
}


F:\myproject\c_program\exp1.cpp(39) : error C2558: class 'R' : no copy constructor available
Error executing cl.exe.

此处b是一个常对象,我想问一下错误原因是不是不能用常对象去初始化对象bb啊
2011-11-16 23:19
xltc500
Rank: 2
等 级:论坛游民
帖 子:6
专家分:47
注 册:2011-11-17
收藏
得分:15 
报错是因为你的R构造函数中的参数是非const引用,因而在函数的调用时只能传递非const变量,而你定义的b是const常量,因而导致错误。
#include <iostream>
using namespace std;
class R
{
    public:
        R(int r1,int r2) {R1 = r1; R2 = r2;}
        R(const R &r);
        ~ R() {}
        void print();
        void print() const;
    private:
        int R1,R2;
};

void R::print()
{
    cout<<R1<<":"<<R2<<endl;
}

R::R(const R &r)
{
    R1 = r.R1;
    R2 = r.R2;
}

void R::print() const
{
    cout<<R1<<";"<<R2<<endl;
}

int main()
{
    R a(5,4);
    a.print();
    R const b(20,52);
    b.print();
    R aa(a);
    aa.print();
    R bb(b);      //这个地方有错误
    bb.print();
    return 0;
}
2011-11-17 03:39
lucky563591
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:765
专家分:2103
注 册:2009-11-18
收藏
得分:5 
把bb定义为const对象就行
2011-11-17 08:58
快速回复:最近刚学c++,有个小疑问
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015603 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved