我正在编写这个程序,我定义了一个class X
并手动定义了它的构造函数和析构函数,这样我就可以在每个函数中都有一个print语句,看看它们何时被调用。
然而,问题似乎在于我对复制构造函数的定义。
它出现以下错误:
警告:将
的参数const X
传递为this
int X::getI()
丢弃const
这个错误的原因是什么?
类的代码段:
class X {
public:
X() {
cout << "Default Constructor called\n";
i = 0;
}
X(int i) {
cout << "Parameterized Constructor called\n";
this->i = i;
}
X(const X& x) {
cout << "Copy Constructor called\n";
i = x.getI();
}
~X() {
cout << "Destructor called\n";
}
int getI() {
return i;
}
private:
int i;
};
答案 0 :(得分:3)
您正试图通过const
引用来调用非getI
成员函数const
。这是不允许的。由于getI
不会修改this
个对象,因此应将其声明为const
。
int
getI() const
{
return this->i;
}
然后,您甚至可以通过const
引用来调用它。
答案 1 :(得分:1)
getI()
不是const
成员函数。您不能在const
的对象上调用它。在复制构造函数中,x
是const
对象。因此,您无法致电
x.getI();
将getI()
更改为const
成员函数。
int getI() const {
return i;
}
答案 2 :(得分:0)
#include <iostream>
using namespace::std;
class X {
public:
X() {
cout << "Default Constructor called\n";
i = 0;
}
X(int i) {
cout << "Parameterized Constructor called\n";
this->i = i;
}
X(const X& x) {
cout << "Copy Constructor called\n";
i = x.getI();
}
~X() {
cout << "Destructor called\n";
}
int getI() const {
return i;
}
private:
int i;
};
int main()
{
}
这是正确的代码,你必须将getI作为const