这是我到目前为止的代码:
#include <iostream>
using namespace std;
class Rectangle
{
private:
double width, height;
public:
Rectangle();
double Set(double x, double y);
double getArea();
double getPerimeter();
};
Rectangle::Rectangle()
{
width = 1;
height = 1;
}
double Rectangle::Set(double x, double y)
{
width = x;
height = y;
}
double Rectangle::getArea()
{
double area = height * width;
return area;
}
double Rectangle::getPerimeter()
{
double perimeter = (width * 2) + (height * 2);
return perimeter;
}
int main()
{
double width, height;
cout << "Enter the width and height of a rectangle:";
cin >> width >> height;
cout << "The area is " << Rectangle::getArea << " and the perimeter is " << Rectangle::getPerimeter << endl;
}
运行此代码时,我收到错误:“'Rectangle :: getArea':非标准语法;使用'&amp;'创建指向成员的指针“ 我得到了关于Rectangle :: getPerimeter的相同错误 我不知道问题是什么,我很擅长用C ++编写课程,所以我遇到了一些麻烦。有什么建议吗?
答案 0 :(得分:2)
首先创建Rectangle()
类的对象,然后调用相应的方法。
Rectangle rect;/* object of rectangle class */
您的main()
看起来像
int main() {
double width, height;
cout << "Enter the width and height of a rectangle:";
cin >> width >> height;
Rectangle rect;/* object of rectangle class */
/* calling set method and passing the parameter */
rect.Set(width,height);
cout << "The area is " << rect.getArea() << " and the perimeter is " << rect.getPerimeter() << endl;
return 0;
}
如果我理解正确,你实际上并不需要Set()
方法,而是通过传递参数来使用构造函数执行相同的操作。
参数化构造函数而不是Set()
方法
Rectangle::Rectangle(double x, double y) {
width = x;
height = y;
}
创建像
这样的对象Rectangle rect(width,height);/* it will be called automatically */
答案 1 :(得分:1)
对于初学者,此成员函数不返回任何内容
double Rectangle::Set(double x, double y)
{
width = x;
height = y;
}
所以它应该被定义为
void Rectangle::Set(double x, double y)
{
width = x;
height = y;
}
看来你的意思是
//...
cin >> width >> height;
Rectangle r;
r.Set( width, height );
cout << "The area is " << r.getArea() << " and the perimeter is " << r.getPerimeter() << endl;
函数getArea
和getPerimeter
应声明为常量成员函数
double getArea() const;
double getPerimeter() const;
因为它们不会更改Rectangle类型的对象。
如果类具有带两个参数的构造函数
,那将是逻辑一致的Rectangle( double width, double height );
方法Set
应该分为两个方法,如setWidth
和setHeight
。
答案 2 :(得分:1)
您的代码存在一些问题。
1。)您永远不会实例化该类(即创建该类类型的对象。)具有名称width
和height
的两个变量与具有该类型的对象不同矩形。
2。)您正在尝试将非静态成员函数调用为静态成员函数。例如,通过对象调用成员函数
rect.getArea()
其中rect
是Rectangle
类型的对象。
3.)您在函数调用中缺少括号。每当您收到消息non-standard syntax, use & to create a pointer to a member
时,通常意味着您在函数调用时忘记了括号。
你想要的可能是:
int main()
{
double width, height;
cout << "Enter the width and height of a rectangle:";
cin >> width >> height;
Rectangle rect;
rect.Set(width, height);
cout << "The area is " << rect.getArea() << " and the perimeter is " << rect.getPerimeter() << endl;
}