运行代码时出现这些错误:
期望的成员名称或“;”声明后声明符
“矩形”的构造函数必须显式初始化const成员“宽度”
这可能是由于我缺乏课堂知识,但是我不知道该怎么做。
这里是错误所在的类:
class Rectangle
{
const double length;
const double width;
public:
Rectangle(const vector<string> &internal) : length(internal.size() >= 2 ? atof(internal[1].c_str()) : 0) {},
width(internal.size() >= 3 ? atof(internal[2].c_str()) : 0) {};
Rectangle& operator = (const Rectangle&);
void outputRectangle(ostream&) const;
};
答案 0 :(得分:0)
您在长线的结尾附近有一个错字,还有一个额外的{}
。删除这些,它应该可以编译。
IMO,最好使用具有返回矩形的函数的代码样式,而不是将逻辑打包到构造函数中。示例:
class Rectangle
{
const double length;
const double width;
public:
Rectangle(double length, double width): length(length), width(width) {}
void outputRectangle(ostream&) const;
};
Rectangle make_rectangle(const vector<string> &internal)
{
double length = 0.0, width = 0.0;
if ( internal.size() > 2 )
width = std::stod(internal[2]);
if ( internal.size() > 1 )
length = std::stod(internal[1]);
return { length, width };
}
我还建议让outputRectangle
是一个自由函数,并且成员变量应为非{const
。人们可以通过声明const Rectangle
来简化生活。
例如,当这些成员为Rectangle& operator= (const Rectangle&);
时,实际上无法实现建议的功能const
。对于非const版本,您根本不需要编写任何东西,因为隐式生成的operator=
可以使用。
答案 1 :(得分:0)
className(type1 arg1, type2 arg2):member1(arg1), member2(arg2)
{
// constructor body
}
这在c ++中称为初始化列表。 member1(arg1)和member2(arg2)不是函数。
只需使用传递的值初始化数据成员。因此,您只需要删除初始化程序列表末尾的{},代码就可以正常工作。