2013-06-10 1 views
1

Je pratique la déclaration de classe/mise en œuvre/passage d'objet par référence. Voici mon code pour ma classe principale, le fichier d'en-tête, et d'autres classes:Impossible de passer un objet constant par référence

//Header file (Circle2.h) 
#ifndef CIRCLE_H 
#define CIRCLE_H 

class Circle{ 
    private: 
     double radius; 

    public: 
     Circle(); 
     Circle(double newRadius); 
     double getArea() const; 
     double getRadius() const; 
     void setRadius(double newRadius); 
}; 
#endif 

//Main class (PassObjectByReference.cpp) 
#include <iostream> 
#include "Circle2.h" 
using namespace std; 

void printCircle(const Circle &c){ 
    cout << "The area of the circle of " << c.getRadius() << " is " << c.getArea() << endl; 
} 

int main(){ 
    Circle myCircle(5.0); 
    printCircle(&myCircle); 

    return 0; 
} 

//Other class (Circle2.cpp) 
#include "Circle2.h" 

Circle::Circle(){ 
    radius = 1; 
} 

Circle::Circle(double newRadius){ 
    radius = (newRadius >= 0) ? newRadius : 0; 
} 

double Circle::getRadius() const{ 
    return radius; 
} 

double Circle::getArea() const{ 
    return radius * radius * 3.14159; 
} 

void Circle::setRadius(double newRadius){ 
    radius = (newRadius >= 0) ? newRadius : 0; 
} 

Lorsque je tente de compiler, je reçois ces deux erreurs:

PassObjectByReference.cpp: En fonction « int main() ': PassObjectByReference.cpp: 11: erreur: initialisation invalide de la référence de type' const Circle & 'à partir de l'expression de type' Circle * ' PassObjectByReference.cpp: 5: erreur: en passant l'argument 1 de' void printCircle (const Circle &) '

Je ne peux pas trouver l'erreur. Toute aide serait grandement appréciée. Merci!

Répondre

8
int main(){ 
    Circle myCircle(5.0); 
    printCircle(&myCircle); // You are passing a pointer. 
    return 0; 
} 

La déclaration correcte est:

printCircle(myCircle); 
+0

Merci beaucoup! – Johnathan

2

Supprimez le & - cela le transforme en un pointeur, ce qui n'est pas ce que vous voulez. Vous devriez écrire simplement:

printCircle(myCircle); 
Questions connexes