在“。”之前的预期主要表达。

时间:2012-03-20 20:23:51

标签: c++ class

#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 ??

6 个答案:

答案 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::widthlength

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的实例,因此您需要在特定对象上定义它。

另一方面,实例变量lengthwidth属于类的特定实例,而不是整个类本身(否则您将它们声明为static)。这意味着您可以直接引用它们而不是通过类本身,编译器将知道您正在谈论的变量。这是因为widthlength定义在与方法相同的范围内,因此您无需为::指定特殊方向,告诉它在何处查找其外观对于。因此:

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));
    }

但方形的长度和宽度是否相等?