Iso C++ forbids list with no type

cs_Abderrahmaine Messages postés 9 Date d'inscription mercredi 9 septembre 2009 Statut Membre Dernière intervention 9 avril 2011 - 21 déc. 2009 à 17:59
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 21 déc. 2009 à 22:23
Salut tout le monde, Je suis confus pourquoi list<Case*> EltObsatcle; dans grille.h a fonctionné et dans la classe Itineraire.h quand je met list<Case*> chemin ; elle ne fonctionne pas et m'indique 14 C:\Documents and ISO C++ forbids declaration of `list' with no type .
Mon travail est sur http://www.4shared.com/file/178130308/7ad56c33/Robotss.html

merci d'avance !!
A voir également:

9 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
21 déc. 2009 à 18:49
Sans regarder ton projet, ça ressemble à un oubli d'include.

Vérifie que tu as bien #include <list>
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
21 déc. 2009 à 19:01
Après avoir regardé ton code, c'est une horreur !

Alors:
* Pas de using namespace std, et surtout pas dans un .h !!!
* Si tu fais des forward declaration, alors tu es tenu de faire un include dans le .cpp correspondant.
* Tu passes tout par copie, même les tableaux, tu vas avoir de gros problèmes de performance.
* conio.h => Tu as vraiment besoin de ça ? Ca m'empêche de compiler chez moi (Je suis sous Linux).
* C'est surement une erreur de syntaxe, parce que je ne vois pas ce que tu essais de faire avec: "list<Case*> ::EltObsatcle(){};"

En retirant les conio.h, j'arrive à diminuer les erreurs à

Grille.cpp: In constructor ‘Grille::Grille()’:
Grille.cpp:14: error: invalid use of incomplete type ‘struct Case’
Grille.h:5: error: forward declaration of ‘struct Case’
Grille.cpp:23: error: invalid use of incomplete type ‘struct Case’
Grille.h:5: error: forward declaration of ‘struct Case’
Grille.cpp:23: error: invalid use of incomplete type ‘struct Case’
Grille.h:5: error: forward declaration of ‘struct Case’
In file included from Itineraire.cpp:1:
Itineraire.h:12: error: ISO C++ forbids declaration of ‘list’ with no type
Itineraire.h:12: error: expected ‘;’ before ‘<’ token
Main.cpp:4:20: error: conio.h: Aucun fichier ou dossier de ce type
In file included from Main.cpp:3:
Itineraire.h:12: error: ISO C++ forbids declaration of ‘EltObsatcle’ with no type
Itineraire.h:12: error: cannot define member function ‘std::list<Case*, std::allocator<Case*> >::EltObsatcle’ within ‘Itineraire’
In file included from Main.cpp:5:
Case.h:1: error: redefinition of ‘class Case’
Case.h:3: error: previous definition of ‘class Case’
Main.cpp: In function ‘int main()’:
Main.cpp:11: error: ‘getch’ was not declared in this scope
Robot.cpp: In member function ‘bool Robot::presenceObstacle(int, int) const’:
Robot.cpp:32: error: invalid use of incomplete type ‘struct Case’
Grille.h:5: error: forward declaration of ‘struct Case’
Robot.cpp:32: error: invalid use of incomplete type ‘struct Case’
Grille.h:5: error: forward declaration of ‘struct Case’


La très grande majorité des erreur est dû à des "forward declaration" mal utilisées. Remplace les "class Case;", par des #include "Case.h", et applique ceci pour tout. Si ton prof t'a dit que c'était mieux en écrivant "class truc;" plutôt que #include "truc.h", il n'a pas tort, mais ce n'est à mon sens pas à la portée d'un débutant d'en comprendre la raison.

J'ai arrếté de regarder, je t'invite à corriger déjà tout cela, et si le problème persiste, poste ton code mis à jour.
0
cs_Abderrahmaine Messages postés 9 Date d'inscription mercredi 9 septembre 2009 Statut Membre Dernière intervention 9 avril 2011
21 déc. 2009 à 19:29
Merci infiniment
ça a fonctionné dés que j'ai mis using namespace std;
Mais à propos de conio.h, n'est il pas nécessaire pour utilise getch() ??
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
21 déc. 2009 à 19:32
Oublie getch(), tu es en C++. Tu as std::cin et std::getline. Si tu veux empêcher la fermeture de fenêtre, regarde les options de std::cin.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Abderrahmaine Messages postés 9 Date d'inscription mercredi 9 septembre 2009 Statut Membre Dernière intervention 9 avril 2011
21 déc. 2009 à 19:39
quand j'ai enlevé ce conio.h voilà redefinition of `class Case'
0
cs_Abderrahmaine Messages postés 9 Date d'inscription mercredi 9 septembre 2009 Statut Membre Dernière intervention 9 avril 2011
21 déc. 2009 à 19:44
0
cs_Abderrahmaine Messages postés 9 Date d'inscription mercredi 9 septembre 2009 Statut Membre Dernière intervention 9 avril 2011
21 déc. 2009 à 20:07
avec system("PAUSE"); ça fonctionne !!!!
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
21 déc. 2009 à 22:13
quand j'ai enlevé ce conio.h voilà redefinition of `class Case'

C'est parce que tu n'as pas mise de garde le .h (le #ifndef CASE_H_ etc...)

avec system("PAUSE"); ça fonctionne !!!!

Beurk !
Ca ne fonctionnera pas partout. Sous unix notamment, ça ne fonctionnera pas. La fonction system est à éviter, tu perds la portabilité de ton programme pour une fonctionnalité discutable.
Préfère regarder du côté de cin. Quelqu'un avait posté une méthode portable pour faire cela, je te vais la rechercher.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
21 déc. 2009 à 22:23
Voilà la manière propre et portable de marquer une pause en C++.

std::cin.ignore(1024, '\n');
std::cout << "Press enter to continue...";
std::cin.get();


On peut très bien en faire une fonction:
Exemple:
#include 

void pause()
{
  std::cin.ignore(1024, '\n');
  std::cout << "Press enter to continue...";
  std::cin.get();
}

int main()
{
  // Code

  pause();

  return 0;
}
0
Rejoignez-nous