Primaire expression before '.'
#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;
}
Je suis en train d'écrire un simple programme de classe. J'obtiens l'erreur
en fonction de membre de la " double carré::périmètre()';
.rpc:21: erreur: primary-expression before '.' token
.rpc:21: erreur: primary-expression before '.' token
Cela signifie que je dois utiliser 2*carré::longueur + 2*carré::largeur??
Pourquoi un carré différent
length
et width
? Vous pouvez simplement utiliser side
.OriginalL'auteur photon | 2012-03-20
Vous devez vous connecter pour publier un commentaire.
square
est un type, pas un objet; au lieu dene
(ce qui est implicitement le même:
que vous pouvez, ou ne peut pas, préfèrent pour plus de clarté).
2*square::length + 2*square::width
serait une erreur de syntaxe silength
etwidth
ont étésquare
, ousquare
, ousquare
OriginalL'auteur ildjarn
Oui, la forme précise serait:
depuis
square
est un type, pas un objet.Dans ce contexte, c'est la même chose que:
Cependant, comme c'est le même objet et le même type, il vous suffit d'écrire:
ou, plus simplement:
OriginalL'auteur Lightness Races in Orbit
Simplement utiliser
OriginalL'auteur Bart
Vous avez besoin de dire
square::perimeter()
parce que vous êtes à la définition d'une méthode de la classe square lui-même. Il peut sembler comme vous voulez définir sur un objet spécifique, mais vous voulez qu'il soit disponible à toutes les instances de la place, si vous avez besoin de la définir sur un type spécifique.Les variables d'instance
length
etwidth
sur l'autre main, se rapportent à une instance spécifique d'une classe, et non PAS l'ensemble de la classe elle-même (sinon, vous devez les déclarer commestatic
). Cela signifie que vous pouvez simplement vous référer directement au lieu de passer par la classe elle-même, et le compilateur de savoir ce que les variables que vous êtes en train de parler. C'est parce quewidth
etlength
sont définies dans le même champ d'application que la méthode, de sorte que vous n'avez pas besoin de donner des instructions spéciales avec::
à lui dire où trouver ce que sa recherche. Donc:OriginalL'auteur Gordon Gustafson
pour accéder aux variables d'instance, juste le nom de:
OriginalL'auteur Karoly Horvath
quel est le
square
dans cette fonction? square est une classe. vous utilisez le.
opérateur pour l'accès des membres à partir d'objets. commesq.somefun();
de sorte que vous périmètre de la fonction:
Mais n'est pas la longueur et la largeur de carrés égaux?
OriginalL'auteur Rohit Vipin Mathews