C++ copy constructor error: Assignment of member 'Fraction::numerator' in read-only object
C++ copy constructor error: Assignment of member 'Fraction::numerator' in read-only object
我的头文件:
#include <iostream>
using namespace std;
class Fraction
{
private:
double numerator;
double denominator;
public:
Fraction();
~Fraction();
Fraction(const Fraction& c);
Fraction(double,double);
//setter
void setNumerator(double newnumerator);
void setDenominator(double newdenominator);
//getter
double getNumerator();
double getDenominator();
//friend overlaoding operators
friend ostream& operator<<(ostream& os, Fraction f);
};
我的 CPP 文件:
#include <iostream>
#include "Fraction.h"
using namespace std;
Fraction::Fraction()
{
cout<<"Empty constructor called"<<endl;
}
Fraction::~Fraction()
{
cout<<"Deconstructor called"<<endl;
}
Fraction::Fraction(const Fraction& c)
{
c.numerator = numerator;
c.denominator = denominator;
}
Fraction::Fraction(double newnumerator, double newdenominator)
{
numerator = newnumerator;
denominator = newdenominator;
}
void Fraction::setNumerator(double newnumerator)
{
numerator = newnumerator;
}
void Fraction::setDenominator(double newdenominator)
{
denominator = newdenominator;
}
double Fraction::getNumerator()
{
return numerator;
}
double Fraction::getDenominator()
{
return denominator;
}
ostream& operator<<(ostream& os, Fraction f)
{
os<<f.numerator<<"/"<<f.denominator<<endl;
return os;
}
我的testcpp.file:
#include <iostream>
#include "Fraction.h"
using namespace std;
int main()
{
Fraction f1;
cout<<f1;
return 0;
}
当我 运行 此代码时,我收到以下 error
消息:
Fraction.cpp: In copy constructor ‘Fraction::Fraction(const Fraction&)’:
Fraction.cpp:20:17: error: assignment of member ‘Fraction::numerator’ in read-only object
c.numerator = numerator;
Fraction.cpp:21:19: error: assignment of member ‘Fraction::denominator’ in read-only object
c.denominator = denominator;
PS: 一旦我省略了复制构造函数并尝试了其余部分是否真的有效,但我得到了相同的 error
消息重载运算符(cin >>
).
非常感谢。
你的拷贝构造函数是倒退的。您应该从参数化实例复制到 this
实例。
Fraction::Fraction(const Fraction& c)
{
numerator = c.numerator;
denominator = c.denominator;
}
摆脱 const 并放置一个 ref。 &symbol
在分数旁边。为什么?对对象进行更改?
friend istream& operator>>(istream &is, Fraction &f);
istream& operator>>(istream &is, Fraction &)
{
cout<<"Enter numerator"<<endl;
is>>f.numerator;
cout<<"Enter denominator"<<endl;
is>>f.denominator;
return is;
}
我的头文件:
#include <iostream>
using namespace std;
class Fraction
{
private:
double numerator;
double denominator;
public:
Fraction();
~Fraction();
Fraction(const Fraction& c);
Fraction(double,double);
//setter
void setNumerator(double newnumerator);
void setDenominator(double newdenominator);
//getter
double getNumerator();
double getDenominator();
//friend overlaoding operators
friend ostream& operator<<(ostream& os, Fraction f);
};
我的 CPP 文件:
#include <iostream>
#include "Fraction.h"
using namespace std;
Fraction::Fraction()
{
cout<<"Empty constructor called"<<endl;
}
Fraction::~Fraction()
{
cout<<"Deconstructor called"<<endl;
}
Fraction::Fraction(const Fraction& c)
{
c.numerator = numerator;
c.denominator = denominator;
}
Fraction::Fraction(double newnumerator, double newdenominator)
{
numerator = newnumerator;
denominator = newdenominator;
}
void Fraction::setNumerator(double newnumerator)
{
numerator = newnumerator;
}
void Fraction::setDenominator(double newdenominator)
{
denominator = newdenominator;
}
double Fraction::getNumerator()
{
return numerator;
}
double Fraction::getDenominator()
{
return denominator;
}
ostream& operator<<(ostream& os, Fraction f)
{
os<<f.numerator<<"/"<<f.denominator<<endl;
return os;
}
我的testcpp.file:
#include <iostream>
#include "Fraction.h"
using namespace std;
int main()
{
Fraction f1;
cout<<f1;
return 0;
}
当我 运行 此代码时,我收到以下 error
消息:
Fraction.cpp: In copy constructor ‘Fraction::Fraction(const Fraction&)’: Fraction.cpp:20:17: error: assignment of member ‘Fraction::numerator’ in read-only object
c.numerator = numerator;
Fraction.cpp:21:19: error: assignment of member ‘Fraction::denominator’ in read-only object
c.denominator = denominator;
PS: 一旦我省略了复制构造函数并尝试了其余部分是否真的有效,但我得到了相同的 error
消息重载运算符(cin >>
).
非常感谢。
你的拷贝构造函数是倒退的。您应该从参数化实例复制到 this
实例。
Fraction::Fraction(const Fraction& c)
{
numerator = c.numerator;
denominator = c.denominator;
}
摆脱 const 并放置一个 ref。 &symbol
在分数旁边。为什么?对对象进行更改?
friend istream& operator>>(istream &is, Fraction &f);
istream& operator>>(istream &is, Fraction &)
{
cout<<"Enter numerator"<<endl;
is>>f.numerator;
cout<<"Enter denominator"<<endl;
is>>f.denominator;
return is;
}