【发布时间】:2016-09-23 17:30:10
【问题描述】:
我是 C++ 新手
以下是将英制距离(英尺'英寸')的对象转换为米的代码,反之亦然
#include <iostream>
using namespace std;
class Distance
{
private:
const float MTF;
int feet;
float inches;
public:
Distance() : feet(0), inches(0.0), MTF(3.280833F) //no argument constructor
{ }
Distance(float meters) : MTF(3.28033F)//(1-arg constructor)
{//coverting metres to distance object
float fltfeet = MTF * meters;
feet = int(fltfeet);
inches = 12*(fltfeet-feet);
}
Distance(int ft, float in) : feet(ft), inches(in), MTF(3.280833F)
{ }
void getdist()//get distance from user
{
cout << "\nEnter feet: "; cin >> feet;
cout << "Enter inches: "; cin >> inches;
}
void showdist() const // o/p the distance
{ cout << feet << "\'-" << inches << '\"'; }
operator float() const //conversion operator
{ // converts distance to meters
float fracfeet = inches/12;
fracfeet += static_cast<float>(feet);
return fracfeet/MTF;
}
};
int main()
{
float mtrs;
Distance dist1 = 2.35F; //meters to distance
cout << "\ndist1 = "; dist1.showdist();
mtrs = static_cast<float>(dist1); //casting distance to meters
cout << "\ndist1 = " << mtrs << " meters\n";
Distance dist2(5, 10.25);
mtrs = dist2; //casting dist2 to meters
cout << "\ndist2 = " << mtrs << " meters\n";
Distance dist3; //new object dist3
dist3 = mtrs; //here is the error
//not converting meters to distance object
cout<<"\ndist3 = ";dist3.showdist();
return 0;
}
但代码显示错误:
在成员函数'Distance& Distance::operator=(const Distance&)'中:
错误:非静态 const 成员 'const float Distance::MTF',不能使用默认赋值运算符
不应该将 mtrs 转换为对象 dist3 吗?
为什么会出错?
【问题讨论】:
-
请编辑您的问题以包含minimal reproducible example。显示的错误是由与您提供的源代码不同的源代码生成的。
-
这与您遇到的问题无关,但与您的
Distance()和Distance(int ft, float in)构造函数相比,您在Distance(float meters)构造函数中将 MTF 设置为不同的值。这就是当您可以使用 c++11 时,Slava 的以下回答很好的原因之一。 -
“英语距离”?在英格兰,我们从 1969 年就开始使用仪表。那是 47 年。将近半个世纪!
标签: c++ oop type-conversion