2013-02-22 96 views
0

Je ne voulais pas que ce soit mon premier message, mais je suis perdu ici. Je continue d'obtenir cette erreur en essayant de compiler mon programme (qui est censé simplement trouver la zone et le périmètre d'un rectangle.) Ceci est mon fichier d'en-tête.L'expression doit avoir un type de classe

#include <iostream> 
using namespace std; 

class Rectangle 
{ 
public: 
    Rectangle(float Lngth=1, float Wdth = 1); 

    void setLngth(float Lngth); 
    void setWdth(float Wdth); 
    float getLngth(float Lngth); 
    float getWdth(float Wdth); 
    void Perimeter(float lngth, float wdth); 
    void Area(float lngth, float wdth); 
private: 
    float Lngth; 
    float Wdth; 
}; 

Ceci est mon fichier .cpp.

#include <iostream> 
using namespace std; 

#include "RealRectangle.h" // Employee class definition 


Rectangle::Rectangle(float Lngth, float Wdth) 
{ 
&Rectangle::setLngth; 
&Rectangle::setWdth; 
} 
void Rectangle::setLngth(float Lngth) 
{ 
     if((Wdth > 0.0) && (Wdth < 20.0)) 
     float wdth = Wdth; 
     else 
      cout<<"Invalid Width."<<endl; 
} 

float Rectangle::getLngth(float Lngth) 
{ 
    return Lngth; 
} 

void Rectangle::setWdth(float Wdth) 
{ 
    if((Wdth > 0.0) && (Wdth < 20.0)) 
     float wdth = Wdth; 
     else 
      cout<<"Invalid Width."<<endl; 
} 

float Rectangle::getWdth(float Wdth) 
{ 
    return Wdth; 
} 

void Rectangle::Perimeter(float lngth, float wdth) 
    { 
     cout<<"The Perimeter is "<<(2*(lngth + wdth)); 
    } 
void Rectangle::Area(float lngth, float wdth) 
    { 
     cout<<"The Area is "<<(lngth * wdth); 
    } 

Et c'est là que je continue à courir dans une erreur. Le compilateur me dit d'ajouter une esperluette pour créer un pointeur comme je l'ai fait dans le fichier .cpp. Mais cela crée une autre erreur par elle-même. Etc. Je ne suis pas sûr de ce que je fais mal. Les erreurs se produisent à la ligne 10 et 11.

+1

S'il vous plaît poster le message d'erreur exact, y compris le numéro de ligne. –

+0

Vous devriez probablement vous habituer à ne pas utiliser 'using namespace std; 'dans vos fichiers. Cela peut entraîner une pollution de l'espace de noms. – ChiefTwoPencils

Répondre

2

Vous avez rencontré ce que l'on a appelé l'analyse la plus vexante.

Rectangle rectangle1(); 
Rectangle rectangle2(); 

déclare deux fonctions et non deux objets. Ne

Rectangle rectangle1; 
Rectangle rectangle2; 

De plus, vous devriez probablement changer les &Rectangle::setLngth pour fonctionner des appels. Rectangle :: Perimeter() et Rectangle :: Area() sont de type void

1

Ils ne retournent rien. Pourtant, vous essayez d'utiliser leurs valeurs de retour inexistantes et passez-le à cout.

Soit modifier ces deux fonctions afin qu'ils vont retourner une valeur:

float Rectangle::Perimeter(float lngth, float wdth) 
{ 
     return 2 * (lngth + wdth); 
} 

float Rectangle::Area(float lngth, float wdth) 
{ 
     return lngth * wdth; 
} 

ou modifier votre fonction principale() pour appeler simplement les fonctions, depuis que vous les avez maintenant ils impriment déjà cout:

int main() 
{ 
    Rectangle rectangle1; 
    Rectangle rectangle2; 

    rectangle1.Perimeter(); 
    rectangle2.Area(); 
} 

Mais vous avez toujours un problème; Ces deux fonctions prennent actuellement des arguments de longueur et de largeur et je ne pense pas que ce soit ce que vous voulez. Il semble que ce que vous voulez, c'est obtenir le périmètre et la surface des objets rectangle. Donc, vous devriez utiliser les variables de classe pour le calculer. omettre donc les arguments et utiliser vos membres de données privées à la place:

float Rectangle::Perimeter() 
{ 
     return 2 * (Lngth + Wdth); 
} 

float Rectangle::Area() 
{ 
     return Lngth * Wdth; 
} 

Ne pas oublié de mettre à jour également les signatures de fonction dans votre déclaration de classe dans votre fichier d'en-tête, non seulement la mise en œuvre dans le fichier cpp.

En outre, votre constructeur ne délègue pas le travail d'initialisation correctement. Les appels de fonction sont de la forme function(arguments), et non &function. Donc, vous devez faire:

Rectangle::Rectangle(float Lngth, float Wdth) 
{ 
    setLngth(Lngth); 
    setWdth(Wdth); 
} 

Enfin, sont mal interprété les déclarations de vos Rectangle objets comme des prototypes de fonction:

Rectangle rectangle1(); 
Rectangle rectangle2(); 

Le compilateur pense que rectangle1 et rectangle2 sont des fonctions qui ne prennent pas les arguments et retourne un rectangle.Vous devez omettre les parenthèses:

Rectangle rectangle1; 
Rectangle rectangle2; 

Et nous ne sommes toujours pas encore fini (Dieu, combien d'erreurs sont dans ce programme :-P). Vos setLngth et setWdth fonctions ne fonctionnent pas comme prévu:

void Rectangle::setLngth(float Lngth) 
{ 
    if((Wdth > 0.0) && (Wdth < 20.0)) 
     float wdth = Wdth; 
    else 
     cout<<"Invalid Width."<<endl; 
} 

Prenez un bon coup d'oeil. En particulier, la ligne qui dit float wdth = Wdth; Ce que votre fonction fait, est de prendre un float argument nommé Lngth, puis vérifie si Wdth (la variable privée) est à portée, et si elle est, déclare une nouvelle variable locale float appelée wdth et le définit à la même valeur que Wdth.

La fonction n'initialise pas la variable privée Wdth. Il en va de même pour votre fonction setWdth. Vous devriez les corriger aussi.

0

Ce:

Rectangle::Rectangle(float Lngth, float Wdth) 
{ 
&Rectangle::setLngth; 
&Rectangle::setWdth; 
} 

devrait être ceci:

Rectangle::Rectangle(float Lngth, float Wdth) 
{ 
    setLngth(Lngth); 
    setWdth(Wdth); 
} 

Et ceci:

Rectangle rectangle1(); 
Rectangle rectangle2(); 

devrait être le suivant:

Rectangle rectangle1; 
Rectangle rectangle2; 
Questions connexes