LISTE D'OBJET ... heeeeeeeeeeelpppppppppppp

Signaler
Messages postés
10
Date d'inscription
samedi 17 avril 2004
Statut
Membre
Dernière intervention
22 avril 2004
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
Bonjour,

J'ai encore un petit probleme ;-)

Je dois créer une liste d'obljet POINT ... La classe point a été définie et fonctionne très bien, la classe liste utilise le TEMPLATE T ...

G essayé de créer une classe POINTLIST (code ci dessous) qui crée une liste de point en donnant un nouveau type (typedef list listPoint;).

A la compilation j'ai :
bash-2.05b$ g++ Pointlist.cpp
/tmp/cc4ynokr.o(.text+0x199): In function `main':
: undefined reference to `point::point[in-charge](double, double, double, double)'
collect2: ld returned 1 exit status

alors qu'il reconnait point vu que quand je mets juste point *P1 ... Ca marche.
Si je mets point *P1 = new point(1.0,1.0,0.0,) il me dit :
bash-2.05b$ g++ Pointlist.cpp
Pointlist.cpp: In function `int main()':
Pointlist.cpp:35: no matching function for call to `point::point(double,
double, double)'
point.h:17: candidates are: point::point(const point&)
point.h:20: point::point()
point.h:19: point::point(double, double, double, double)

il reconnait donc bien la classe point ainsi que ses fonctions ...

JE SUIS DONC BLOQUé ;-((((((((

Quelqu'un sait m'aider ???

A bientot.

/* MISE A JOUR : 17/04/2004
PAR : Ant
*/

/* 
  @ author: Delmoiti?Damien
   Grenier Antoine
            Rahier Benjamain
  @ date  : Mars 2004
  classe permettant de créer une liste de points
*/

#include 
#include "Pointlist.h"
#include "list.h"
#include "point.h"

//définition d'une liste contenant des points
typedef list listPoint;
    

//constructeur
Pointlist::Pointlist(){
    prem = new listPoint();
}

//destructeur
Pointlist::~Pointlist(){
    delete prem ;
}

int main()  {

point *P1 = new point(1.0,1.0,0.0,0.0);
//point *P2 = new point(1.0,1.0,0.0,0.0);
//point *P3 = new point(2.0,2.0,0.0,0.0);
  

listPoint *L1 ;
L1 = new listPoint();
  
L1->add(P1);
// 	L1->add(P2);
// 	L1->add(P3);
  
/*  cout<< "|---------------------|" << endl;
  cout<< "| TEST CLASSE LIST  : |" << endl;
  cout<< "|---------------------|" << endl;
  cout<< " ca doit donner 1 : " << endl;
  cout<<  a << endl;
  cout<< " ca doit donner 2 : " << endl;
  cout<<  b << endl;
  cout<< " ca doit donner 3 : " << endl;
  cout<<  c << endl;
  cout<< " ca doit donner 4 : " << endl;
  cout<<  d << endl;
  cout<< " ca doit donner 5 : " << endl;
  cout<<  e << endl;
  
  cout<< "|---------------------|" << endl;
  cout<< "|FIN DU TEST : bravo !|" << endl;
  cout<< "|---------------------|" << endl;*/
  
  return 1;
}

15 réponses

Messages postés
5
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
19 avril 2004

et bien c'est simple le compilateur te dis qu'il ne trouve pas de constructeur avec 4 parametres double (ou float ca depend de ton choix)

donc dans ton point.h il te faut un prototype :

point(double,double,double,double);

et dans ton point.cpp

il te faut definir le constructeur :

point(double a, double b, double c, double d)
{
//code de ton constructeur et la ca fonctionnera.
}

sinon tu peux aussi tout mettre dans ton point.h :

point(double a, double b, double c, double d):variableAdelaClassePoint(a),variableBdelaClassePoint(b),variableCdelaClassePoint(c),variableDdelaClassePoint(d){//code supplementaire de ton constructeur};
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
pourtant on dirait qu'il y a déja un constructeur qui pend 4 doubles:

point.h:17: candidates are: point::point(const point&)
point.h:20: point::point()
point.h:19: point::point(double, double, double, double)
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
oui mais il fait *P1 = new point(1.0,1.0,0.0,) et ya pas de constructeur a 3 parametre, il suffit de mettre une valeur par defaut pour le 4e parametre
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
non il fait avec 4 paramètres, et il a essayé avec 3 pour voir

point *P1 = new point(1.0,1.0,0.0,0.0);
donne

bash-2.05b$ g++ Pointlist.cpp
/tmp/cc4ynokr.o(.text+0x199): In function `main':
: undefined reference to `point::point[in-charge](double, double, double, double)'
collect2: ld returned 1 exit status

et point *P1 = new point(1.0,1.0,0.0,)
donne

bash-2.05b$ g++ Pointlist.cpp
Pointlist.cpp: In function `int main()':
Pointlist.cpp:35: no matching function for call to `point::point(double,
double, double)'
point.h:17: candidates are: point::point(const point&)
point.h:20: point::point()
point.h:19: point::point(double, double, double, double)

(si j'ai bien compris)
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
tu fait g++ PointList.cpp, les autres .cpp sont compiler aussi?

point *P1 = new point(); ca marche ?
Messages postés
10
Date d'inscription
samedi 17 avril 2004
Statut
Membre
Dernière intervention
22 avril 2004

- la fois avec les 3 parametres ct juste pour voir ce qu'il me disait ... et point *P1 = new point(1.0,1.0,0.0,)
donne

bash-2.05b$ g++ Pointlist.cpp
Pointlist.cpp: In function `int main()':
Pointlist.cpp:35: no matching function for call to `point::point(double,
double, double)'
point.h:17: candidates are: point::point(const point&)
point.h:20: point::point()
point.h:19: point::point(double, double, double, double)

=> donc c'est qu'il reconnait quand mm point(double, double, double, double)
- si je fais point *P1 new point(); ca marche pas non plus ...> En fait on dirait qu'il reconnait la methode mais pas tout a fait ... C completement ouf !
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
typedef list listPoint; ?? ca serait pas plutot
typedef list listPoint; ?
Messages postés
10
Date d'inscription
samedi 17 avril 2004
Statut
Membre
Dernière intervention
22 avril 2004

a oui ...
Je v essayer ca demain (g pas les prog sur ce pc).

Merci ... Ca va peut etre marcher ...
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
peut-être que c'est ca, mais ca ne devrait pas enlever l'erreur qui vient de la ligne
point *P1 = new point(1.0,1.0,0.0,0.0);
Messages postés
10
Date d'inscription
samedi 17 avril 2004
Statut
Membre
Dernière intervention
22 avril 2004

tout a fait ...

bash-2.05b$ g++ Pointlist.cpp
/tmp/cclzdGBy.o(.text+0x209): In function `main':
: undefined reference to `point::point[in-charge](double, double, double, double)'
collect2: ld returned 1 exit status


:dissapprove)
Messages postés
10
Date d'inscription
samedi 17 avril 2004
Statut
Membre
Dernière intervention
22 avril 2004

Voici les classe point.h, point.cpp et list.h :

</td></tr></table>point.h

/* MISE A JOUR : 17/04/2004 18h19
PAR : Ant
*/

#ifndef point_h
#define point_h
/* 
  @ author: Delmoitié Damien
    Grenier Antoine
            Rahier Benjamin
  @ date  : Mars 2004
 classe définissant les méthodes de la classe point.cpp
*/

class point 
    {
        public:
                point(double x, double  y, double  u, double  v);
                point();   
                void setX (double  n);
                void setY (double  n);
                void setU (double  n);
void setV (double  n);
void set(double x, double  y, double  u, double  v);
                double  getX ();
                double  getY ();
double  getU ();
                double  getV ();
                double  getVIT ();
double  getDIST (point P);
double  getDIST (double x, double y);
             
        private:
                double   X;
                double   Y;
                double   U;
double   V;
double   VIT;
double   DIST;  
                
    };
    
#endif

point.cpp
/* MISE A JOUR : 17/04/2004 18h19
PAR : Ant
REMARQUE : 
   	- G retir&#65533;tous les & dans les declarations de methode ... Je c pas a quoi ca servait et ca marchait pas
- Il y a une classe main de test ... QUI MARCHE !!! youpie
*/

/* 
  @ author: Grenier Antoine
            Delmoitié Damien
    Rahier Benjamin
  @ date  : Mars 2004
  classe permettant la gestion de differents points qui contiennent positions et vitesses
*/

#include "point.h"
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include 

using namespace std; // Normalement, (pour eviter qu'il ne reconnaisse pas "cout", ... ) c pour l'iostream

//Constructeur avec données
point::point(double x, double  y, double  u, double  v){
    X =  x;
    Y = y;
    U = u;
    V = v;
};

//Constructeur sans donnée
point::point(){
// initialisation d'1 point (0,0) &#65533;une vitesse (0,0)
    X = 0.0;
    Y = 0.0;
    U = 0.0;
    V = 0.0;
};

// Definir la position en X
void point::setX (double n){
        X = n;   
    }; 

// Definir la position en Y
void point::setY (double n){
        Y = n;      
    }; 

// Definir la vitesse U
void point::setU (double n){
        U = n;  
    }; 

// Definir la vitesse V
void point::setV (double n){
        V = n; 
    }; 
    
    //définir la position et les vistesses en une fois pour Damien
void point::set(double x, double  y, double  u, double  v){
    X = x;
    Y = y;
    U = u;
    V = v;
};
    
// renvoit la position en X   
double point::getX (){
        return X;        
    }; 

// renvoit la position en Y
double point::getY (){
        return Y;   
    }; 

// renvoit la vitesse U  
double point::getU (){
        return U;  
    }; 

// renvoit la vitesse V  
double point::getV (){
        return V;  
    }; 

// renvoit la vitesse moyenne  
double point::getVIT (){
VIT = sqrt(pow(U,2) + pow(V,2));
        return VIT;  
    }; 
    

//renvoit la distance entre deux points
double  point::getDIST (point P){
DIST=sqrt(pow(X-P.getX(),2) + pow(Y-P.getY(),2));
return DIST;
};
    
//renvoit la distance entre un point et une position
double  point::getDIST (double x, double y){
DIST=sqrt(pow(X-x,2) + pow(Y-y,2));
return DIST;
};
    

    
 //   METHODE TEST POUR LA CLASSE POINT
    
/*int main()  {
          point *P = new point(0.0,0.0,0.0,0.0) ;
  point *P1 = new point(0.0,0.0,0.0,0.0) ;
  
  P->setX(1.0);
  P->setY(1.0);
  P->setU(3.0);
  P->setV(4.0);
  
  P1->set(2.0,3.0,1.0,1.0);

  
  double a = P->getX(); 
  double b = P->getY();
  double c = P->getU();
  double d = P->getV();
  double e = P->getVIT();
  double f = P->getDIST(*P1);
  double g = P->getDIST(3.0,3.0);
  
  cout<< "|---------------------|" << endl;
  cout<< "| TEST CLASSE POINT : |" << endl;
  cout<< "|---------------------|" << endl;
  cout<< " ca doit donner 1 : " << endl;
  cout<<  a << endl;
  cout<< " ca doit donner 1 : " << endl;
  cout<<  b << endl;
  cout<< " ca doit donner 3 : " << endl;
  cout<<  c << endl;
  cout<< " ca doit donner 4 : " << endl;
  cout<<  d << endl;
  cout<< " ca doit donner 5 : " << endl;
  cout<<  e << endl;
  cout<< " ca doit donner sqrt(5) : " << endl;
  cout<<  f << endl;
  cout<< " ca doit donner sqrt(8) : " << endl;
  cout<<  g << endl;
  
  cout<< "|---------------------|" << endl;
  cout<< "|FIN DU TEST : bravo !|" << endl;
  cout<< "|---------------------|" << endl;
  
  
  return 1;
}*/

list.h

/* MISE A JOUR : 17/04/2004
PAR : Ant
QUOI : compris un peu
*/

#ifndef list_h
#define list_h

/* 
  @ author: Delmoitie Damien
    Grenier Antoine
            Rahier Benjamin
  @ date  : Mars 2004
  classe permettant la gestion d'une structure de donn? de type liste et
  utilisant la classe template.
*/

#include 

using namespace std;

template <class T> 
class list 
    {
        public: list();
                ~list();
                bool add(T *ele);
                T *remove();
                void next();
                void setElement(T *ele);
                T *getCurrent();
                int getLength()const;
                bool isEmpty() const;
                bool isOk() const;
                bool isFirst();
                bool isEnd() const;
                void setFirst();
void trier(double x,double y);
    
        private:
                
                //d'inition d'une structure des maillons "NOEUDS" de la list
                typedef struct NOEUD{
                        struct NOEUD *next;
                        T *element;
                        }Node;
        
                Node *head;
                Node *tail;
                Node *current;                
        
  
    };
    

    
  // CONSTRUCTEUR    
template <class T> 
list<T>::list(){    head  current tail = new Node;
    head->next = NULL;
    current->next = NULL;
    tail->next = NULL;
};

// DESTRUCTEUR
template <class T>
list<T>::~list(){
    setFirst();
        while(!isEmpty()){
                Node *del;
                del=current->next;
                current->next=del->next;
                delete del;
        }
    delete head;
    delete tail;
    delete current;
}

//Ajoute un ??ent dans la liste
template <class T>
bool list<T>::add(T *ele){    bool isFail (current NULL);
    if (current!=NULL){
        Node *pro;
        pro = new Node;
        pro->next = current->next;
        pro->element = ele;
        current->next= pro;
        if (tail == current)tail=current->next;
    }
    return isFail;
};

//verifie que current ne Te pas vers un ??ent NULL
template <class T>
bool list<T>::isOk() const{
    return current != NULL && current->next != NULL;
};

//supprime current de la liste et renvoie l'??ent contenu dans le noeud
template <class T>
T  *list<T>:: remove(){
    T *rem = NULL;
    if (isOk()){
        rem = current->next->element;
        Node *remo=current->next;
        current->next=remo->next;
        if (tail == remo) {
                tail = current;
        }
        delete remo;
    }
    return rem;
};

//place current sur le noeud suivant
template <class T>
void list<T>::next(){
    if (current!= NULL){
        current = current->next;
    }
};

template <class T>    
void list<T>::setElement(T *ele){
    if(isOk()){
        current->next->element = ele;
    }
};

//retourne l'??ent qui se trouve dans le noeud apr? current
template <class T>
T *list<T>::getCurrent(){
    T *el=NULL;
    if (isOk()){
        el=current->next->element;
    }
    return el;
};

//retourne la longueur de la liste
template <class T>
int list<T>::getLength()const{ 
    int counter = 0;
    Node *temp;
    temp = head;
    while(temp->next != NULL){
        counter++;
        temp = temp->next;
    }
    return counter;
};

//V?ifie que la liste n'est pas vide
template <class T>             
bool list<T>::isEmpty() const{return head->next == NULL;};

//V?ifie que l'??ent n'est pas le dernier
template <class T>
bool list<T>::isEnd() const{return current->next == NULL;};

//V?ifie que l'??ent n'est pas le permier
template <class T>
bool list<T>::isFirst() {return current->next->next == NULL;};

//D'init le premier element
template <class T>
void list<T>::setFirst(){current = head;};

//Trie la liste de l'??ent le plus proche en fonction d'une position
template <class T>
void list<T>::trier(double x, double y) {

cout << "\ntri de la liste...";

// Initialisation
list *p1=new list(); 
Node *temp;
  	temp = head;
    
while(temp->next != NULL){
temp = temp->next;
    }
    
    // A FINIR
};
#endif

Messages postés
10
Date d'inscription
samedi 17 avril 2004
Statut
Membre
Dernière intervention
22 avril 2004

et tant qu'on y est ... Pointlist.h ...

Je trouve vraiment pas de solution ... c bizarre ...

/* MISE A JOUR : 19/04/2004
PAR : Ant
*/

#ifndef Pointlist_h
#define Pointlist_h
/* 
  @ author: Delmoitie Damien
    Grenier Antoine
            Rahier Benjamin
  @ date  : Mars 2004
  classe permettant de cr&#65533;r une liste de points
*/

#include "list.h"
#include "point.h"
#include 

typedef list listPoint;

class Pointlist
    {
        public:
                Pointlist();
                ~Pointlist();
                
        private:
          listPoint *prem;

       };
    
#endif

Messages postés
10
Date d'inscription
samedi 17 avril 2004
Statut
Membre
Dernière intervention
22 avril 2004

PROBLEME RESOLU (enfin je crois) GRACE A BLACKGODESS

Il fallait simplement compiler : bash-2.05b$ g++ Pointlist.cpp point.cpp

merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii a tous en tt cas !!
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
ya pas de problème chez moi. C'est bizarre puisqu'il reconnait le constructeur, mais il ne veut pas l'utiliser
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
antgre ==> je t'avais pas demandé plus haut si tu avais bien compilé tt les .cpp au vu de ta commande?