#include <iostream>
using std::cout;
using std::endl;
class square {
public:
double length, width;
square(double length, double width);
square();
~square();
double perimeter();
};
double square::perimeter() {
return 2*square.length + 2*square.width;
}
int main() {
square sq(4.0, 4.0);
cout << sq.perimeter() << endl;
return 0;
}
我正在尝试编写一个简单的类程序。我收到了错误
在成员函数'double square :: perimeter()'中; .cpp:21:错误:在'。'之前预期的primary-expression代币 .cpp:21:错误:在'。'之前预期的primary-expression令牌
这是否意味着我必须使用2 * square :: length + 2 * square :: width ??
答案 0 :(得分:19)
square
是类型,不是对象;而不是
return 2*square.length + 2*square.width;
DO
return 2*length + 2*width;
(隐含地与:
相同return 2*this->length + 2*this->width;
你可以,或 请 可能不喜欢,为了清楚起见。)
如果2*square::length + 2*square::width
和length
, width
将是有效的语法
square
或square
或square
答案 1 :(得分:4)
是的,准确的表格是:
return 2*square::length + 2*square::width;
因为square
是一个类型,而不是一个对象。
在这种情况下,它与:
相同return 2*this->square::length + 2*this->square::width;
但是,因为它是相同的对象和相同的类型,所以你可以写:
return 2*this->length + 2*this->width;
或者,简单地说:
return 2*length + 2*width;
答案 2 :(得分:3)
只需使用
double square::perimeter() {
return 2 * length + 2 * width;
}
答案 3 :(得分:3)
double square::perimeter() {
return 2*square.length + 2*square.width;
}
您需要说square::perimeter()
,因为您正在定义方形类本身的方法。您可能希望在特定对象上定义它,但是您希望它可用于所有square的实例,因此您需要在特定对象上定义它。
另一方面,实例变量length
和width
属于类的特定实例,而不是整个类本身(否则您将它们声明为static
)。这意味着您可以直接引用它们而不是通过类本身,编译器将知道您正在谈论的变量。这是因为width
和length
定义在与方法相同的范围内,因此您无需为::
指定特殊方向,告诉它在何处查找其外观对于。因此:
double square::perimeter() {
return 2 * length + 2 * width; //will refer to the instance variables automatically
}
答案 4 :(得分:2)
访问实例变量,只需命名它们:
double square::perimeter() {
return 2*length + 2*width;
}
答案 5 :(得分:2)
double square::perimeter() {
return 2*square.length + 2*square.width;
}
这个函数中的square
是什么?广场是一类。您使用.
运算符来访问对象中的成员。比如sq.somefun();
所以你的周边功能应该是:
double square::perimeter() {
return (2*(length + width));
}
但方形的长度和宽度是否相等?