代码之家  ›  专栏  ›  技术社区  ›  LandonSchropp

复制构造函数和调用函数

  •  2
  • LandonSchropp  · 技术社区  · 14 年前

    我试图在复制构造函数中调用一个访问函数,但它不起作用。以下是我的问题示例:

    A.

    class A {
    
    public:
        //Constructor
        A(int d);
        //Copy Constructor
        A(const A &rhs);
    
        //accessor for data
        int getData();
    
        //mutator for data
        void setData(int d);
    
    private:
        int data;
    };
    

    A.CPP

    #include "A.h"
    
    //Constructor
    A::A(int d) {
        this->setData(d);
    }
    
    //Copy Constructor
    A::A(const A &rhs) {
        this->setData(rhs.getData()); 
    }
    
    //accessor for data
    int A::getData() {
        return data;
    }
    
    //mutator for data
    void A::setData(int d) {
        data = d;
    }
    

    当我试图编译这个时,我得到以下错误:

    error: passing 'const A' as 'this' argument of 'int A::getData()' discards qualifiers
    

    如果我改变 rhs.getData() rhs.data 然后建造师就可以工作了。是否不允许调用复制构造函数中的函数?有人能告诉我我做错了什么吗?

    2 回复  |  直到 11 年前
        1
  •  8
  •   Michael Mrozek    14 年前

    问题是 rhs 被宣布为 const 但是 getData() 不是,所以它可以修改 RHS 当你叫它的时候,即使 RHS 据说是警察。AS GETDATA() 是访问器,应该是 康斯特 也是:

    //accessor for data
    int getData() const;
    
        2
  •  3
  •   Steve Jessop    14 年前

    只能对非常量对象调用“accessor”,因为它没有标记为const。你应该声明:

    int getData() const;
    

    那你就可以打电话了 rhs ,这是一个常量引用。