关于c ++:’。’之前的预期主表达式

Expected primary expression before '.'

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#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::peripherity()"中;.cpp:21:错误:标记"."之前需要主表达式.cpp:21:错误:标记"."之前需要主表达式

这是否意味着我必须使用2*square::length+2*square::width??


是一种类型,不是一个对象

ZZU1

1
return 2*length + 2*width;

(Which is implicitly the same as:

1
return 2*this->length + 2*this->width;

无论你可能做什么,或请你不要做什么,宁可明晰。

如果lengthwidth是有效的语法

  • square
  • 一些基地级square
  • Objects in some name space square

Yes,the accurate form would be:

1
return 2*square::length + 2*square::width;

是一种类型,而不是一个对象。

在这种情况下,它是一样的:

1
return 2*this->square::length + 2*this->square::width;

但是,既然这是同一个目标和同一个类型,你只能写:

1
return 2*this->length + 2*this->width;

然而,最简单的是:

1
return 2*length + 2*width;


1
2
3
double square::perimeter() {
    return 2*square.length + 2*square.width;
}

因为你确定了一种广场阶级的方法。它看起来像你想在一个特定的对象上定义它,但你想在所有的场合都能找到它,所以你需要在一个特定的对象上定义它。

另一手上的实例变量lengthwidth,是指一个特定的实例,而不是一个整体的实例(否则,你将作为static)。这意味着你可以直接向他们推荐通过班级,编译员会知道你在谈论什么变量。这是因为widthlength是在同一个范围内确定的,所以你不需要给它特殊的方向以::告诉它它在哪里寻找它的目的。Hence:

1
2
3
double square::perimeter() {
    return 2 * length + 2 * width; //will refer to the instance variables automatically
}

简单使用

1
2
3
double square::perimeter() {
    return 2 * length + 2 * width;
}

1
2
3
double square::perimeter() {
return 2*square.length + 2*square.width;
}

这个功能是什么?广场是一个班。运算符从对象访问成员。像EDOCX1

所以你应该是

1
2
3
 double square::perimeter() {
    return (2*(length + width));
    }

但广场的长度和宽度是平等的吗?


To access instance variables,just name them:

1
2
3
double square::perimeter() {
  return 2*length + 2*width;
}