Partage
  • Partager sur Facebook
  • Partager sur Twitter

fonction & operator marche pas

Sujet résolu
    11 juin 2008 à 5:03:05

    Bonjour,

    Jarrive pas a compiler une classe car il ne veut pas de ma def de fonction & operator. Need your help.

    #ifndef POINT_HPP
    #define POINT_HPP
    
    #include <iostream>
    #include <fstream>
    
    class Point {
    	public:
    		Point(): x(0), y(0) {}
    		Point(double new_x, double new_y) : x(new_x), y(new_y) {}
    		Point(const Point &P) {x = P.x; y = P.y; }
    		
    		void setXY(double new_x, double new_y) {x=new_x; y=new_y;}
    		void setX(double new_x) 			   {x = new_x; }
    		void setY(double new_y) 			   {y = new_y; }
    		double getX() const     		       { return x; }
    		double getY() const    				   { return y; }
    
                    Point & operator = (const Point & P);	
    		friend ostream & operator << (ostream & str, const Point &);
    		friend ofstream & operator << (ofstream & fStr, const Point &);
    
    	private:
    double x, y;
    };
    
    #endif
    


    #include "Point.h"
    
    //******************************************************
    //******************************************************
    Point & Point::operator = (const Point & P)
    {
    	if(this == &P)
    		return (*this);
    		
    	x = P.getX();
    	y = P.getY();
    	return (*this);
    }
    
    
    //******************************************************
    //******************************************************
    ostream & operator << ( ostream & str, const Point & p)
    {
    	str << "("<<p.x<<","<<p.y<<")";
    
    	return str;
    }	
    
    //******************************************************
    //******************************************************
    ofstream & operator << ( ofstream & fStr, const Point & p)
    {
    	fStr << p.x << " " << p.y << endl;
    	return fStr;
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      11 juin 2008 à 5:15:14

      Quelle est l'erreur, exactement?
      • Partager sur Facebook
      • Partager sur Twitter
        11 juin 2008 à 6:05:21

        il ne te dit pas quil y'a ambiguite entre tes deux fonction operator ? vu qu'elles ont la meme signature ?
        • Partager sur Facebook
        • Partager sur Twitter
          11 juin 2008 à 6:05:53

          1>c:\documents and settings\angel\mes documents\visual studio 2008\projects\marsterrain\marsterrain\Point.h(30) : error C2143: erreur de syntaxe : absence de ';' avant '&'

          1>c:\documents and settings\angel\mes documents\visual studio 2008\projects\marsterrain\marsterrain\Point.h(30) : error C2433: 'ostream' : 'friend' non autorisé sur les déclarations de données

          1>c:\documents and settings\angel\mes documents\visual studio 2008\projects\marsterrain\marsterrain\Point.h(30) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut

          1>c:\documents and settings\angel\mes documents\visual studio 2008\projects\marsterrain\marsterrain\Point.h(30) : error C2061: erreur de syntaxe : identificateur 'ostream'

          A croire qur rien ne marche simplement???????? je viens du monde Fortran dur c decourageant!!!! j'ai eu une mauvaise idee de vuloir me mettre au C++

          Mon probleme finalement c de construire des fonctions dans ma classe pour gerer les entrees sorties de donnees, exemple creer une fonction qui serait capable de lire la ligne 77 du fichier toto.dat et recup x et y. de meme ecrire dans un ficher les info x et y.
          • Partager sur Facebook
          • Partager sur Twitter
            11 juin 2008 à 8:34:44

            Tous les types standards sont dans le namespace std, il faut donc écrire std::ostream et std::ofstream.

            Ensuite, tu n'as pas besoin de la surcharge avec ofstrem : il dérive de ostream. En fait avec l'opérateur << prenant un ostream, tu gères déjà tous les flux standards puisque ceux-ci en dérivent tous.

            Ensuite pour la saisie, c'est une surcharge de >> avec istream qu'il te faut.
            • Partager sur Facebook
            • Partager sur Twitter
              11 juin 2008 à 8:40:51

              Je vais regarder ca, ou trouver une autre facon de faire car je n'arrive pas a m'en servir correctement on m'a conseille d'ecrire ca mais a vrai dire cela ne me parle pas trop!!!
              • Partager sur Facebook
              • Partager sur Twitter
                11 juin 2008 à 9:20:45

                C'est pourtant la bonne manière de faire, il ne faut pas en chercher d'autre. Si tu as de nouveaux problèmes fais-nous en part ;)
                • Partager sur Facebook
                • Partager sur Twitter
                  20 juin 2008 à 7:21:32

                  Merci pour la reponse donc si j'ai bien compris la surcharge me permet de creer de nouveau type d'operation, dans mon cas si j'ais deux points P1 et P2 si j'ecris
                  P1=P2;
                  std::cout<<P1;
                  maintenant il comprend?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 juin 2008 à 9:21:11

                    oui
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.

                    fonction & operator marche pas

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown