Probleme tableau de pointeurs d'objet

corleone -  
SebManfred Messages postés 484 Statut Membre -
Bonjour,
Je dois écrire un programme où je dois créer un tableau de pointeurs contenant l'adresse d'objets d'une classe prédéfinie "client". La définition et la déclaration du tableau me pose problème:

// restaurant.h
#ifndef RESTAURANT_H
#define RESTAURANT_H
#include <string>
#include <ctime>

using namespace std;

class restaurant { public:
int N; //nombre de places du restaurant
int nombre; //nombre de clients présents
restaurant(int pl=0) : N(pl){};
void accepte(client &cl);
};

#endif

//restaurant.cpp

#include "client.h"
#include "restaurant.h"
#include <string.h>
#include <iostream>

using namespace std;

void restaurant::accepte(client &cl){
client **liste = new *client[N]; //????
client *p;
p=&cl;
if (nombre==N){
cout <<"il ne reste plus de place disponible dans ce restaurant"<< endl;
}
else { for( client * t = liste; t<liste+nombre; t++ ){
if (t==p){
cout <<"le client est déjà présent dans ce restaurant"<< endl;
}
else {
liste[nombre]=p;//?????
nombre++;
cout <<"le client est maitenant présent"<< endl;
}
}
}
delete [] liste;
}

//les erreurs:
Compilateur: Default compiler
Exécution de g++.exe...
g++.exe "C:\Users\Henri.PC-de-Anne\Desktop\Pro\restaurant.cpp" -o "nul" -I"C:\Dev-Cpp\lib\gcc\mingw32\3.4.2\include" -I"C:\Dev-Cpp\include\c++\3.4.2\backward" -I"C:\Dev-Cpp\include\c++\3.4.2\mingw32" -I"C:\Dev-Cpp\include\c++\3.4.2" -I"C:\Dev-Cpp\include" -I"C:\Users\Henri.PC-de-Anne\Desktop\Pro" -L"C:\Dev-Cpp\lib"
C:\Users\Henri.PC-de-Anne\Desktop\Pro\restaurant.cpp: In member function `void restaurant::accepte(client&)':
C:\Users\Henri.PC-de-Anne\Desktop\Pro\restaurant.cpp:10: error: expected identifier before '*' token
C:\Users\Henri.PC-de-Anne\Desktop\Pro\restaurant.cpp:10: error: expected `,' or `;' before "client"
C:\Users\Henri.PC-de-Anne\Desktop\Pro\restaurant.cpp:16: error: cannot convert `client**' to `client*' in initialization
C:\Users\Henri.PC-de-Anne\Desktop\Pro\restaurant.cpp:16: error: comparison between distinct pointer types `client*' and `client**' lacks a cast
Exécution terminée

Merci d'avance pour vos réponses
A voir également:

1 réponse

SebManfred Messages postés 484 Statut Membre 128
 
Salut,
c'est normal, tu n'alloue pas d'espace mémoire pour ton tableau, mais pour un pointeur vers ton tableau.
ce qu'il faudrait que tu fasse, c'est créer un tableau par un client *maliste = new client[N];, qui te retourne un pointeur vers ton tableau, puis récupérer l'adresse de ton pointeur, par client **liste = &maliste; et tu devrais retomber sur tes pieds
je n'ai pas regardé le reste de ton code, je ne sais donc pas si c'est comme ça qu'il faut l'utiliser, mais par rapport à ta déclaration, c'est comme ça qu'il faut faire
3