Menu

Erreur de compilation Java cannot find symbol [Résolu/Fermé]

Messages postés
18
Date d'inscription
dimanche 6 décembre 2009
Statut
Membre
Dernière intervention
15 juillet 2010
- - Dernière réponse : mamiemando
Messages postés
28884
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
17 juillet 2019
- 6 janv. 2016 à 14:59
Bonjour,

J'en appelle à votre aide. J'ai fait un petit logiciel en java de gestion des pièces automobiles qui est constitué de 6 classes (héritage simple):
-une classe abstraite Piece (classe mère);
-Deux classes qui sont une extension de la classe Piece:
*PieceDeBase;
*PieceComposite (classe abstraite);
-Deux classes qui sont une extension de la classe PieceComposite:
*PieceCompositeEnKit;
*PieceAssemblee;
-Une classe MainPiece qui est une application de toutes ces 5 classes.

Les 6 classes sont dans le meme répertoire Pieces.

Lorsque je compile la super classe Piece, tout va bien, j'ai aucune erreur. Par contre, lorsque je compile les sous classes, j'ai une erreur du genre:

PieceDeBase.java:7: cannot find symbol
symbol: class Piece
public class PieceDeBase extends Piece
^
PieceDeBase.java:37: cannot find symbol
symbol : variable super
location: class Prog.Pieces.PieceDeBase
{return super.toString()+"-de base-";}


Ce sont les seules erreurs que j'ai pour toutes mes classes.

Voici ma classe Piece:

 Code:

 package Prog.Pieces;

import java.util.*;
import java.io.*;

public abstract class Piece
{
//Attributs----------------------------------------------------------------------------------

 protected String nom;
 protected String referenceDeBase;

//Constructeurs------------------------------------------------------------------------------
 
Piece()
  {nom="inconnu"; referenceDeBase="000000";}
 
Piece(String n, String r)
  {nom=n; referenceDeBase=r;}

//Accesseurs---------------------------------------------------------------------------------
public String getNom() {return nom;}
public void setNom(String n) {nom=n;}

public String getReferenceDeBase() {return referenceDeBase;}
public void setReferenceDeBase(String r) {referenceDeBase=r;}

//Autres methodes----------------------------------------------------------------------------

public String toString()
{return nom+" "+getReferenceDeBase();}

abstract public float prix();

abstract public float dureeGarantie();

abstract public float dureeFabrication();

abstract public String prefixe();

public String referenceDeBase() {return referenceDeBase;}

public void affiche()
  {
   System.out.println("Nom : "+getNom()+"\n"+
                      "Reference : "+referenceDeBase()+"\n"+
                      "Prix : "+prix()+"euro(s)\n"+
                      "Garantie : "+dureeGarantie()+"mois\n"+
                      "Duree de fabrication : "+dureeFabrication()+"jour(s)\n");
  }

//Partie protegee----------------------------------------------------------------------------

protected String afficheCommeComposants(int decalage)
  {
   String Decale="";
   for (int i=0; i<decalage; i++)
   Decale +="    ";
   return Decale+nom+" - "+referenceDeBase()+"\n";
  }

}


Et voici ma classe PieceDeBase (pour ne vous citer que celles la):

 package Prog.Pieces;

import java.util.*;
import java.io.*;

public class PieceDeBase extends Piece
{
//Attributs-----------------------------------------------------------------

 private float prix;
 private float dureeGarantie;
 private float dureeFabrication;

//Constructeurs-------------------------------------------------------------

 PieceDeBase()
 {prix=0; dureeGarantie=0; dureeFabrication=0;}

 PieceDeBase(String n, String r, float p, float dg, float df)
  {super(n,r); prix=p; dureeGarantie=dg; dureeFabrication=df;}

//Accesseurs----------------------------------------------------------------
 
 public float getPrix() {return prix;}
 public void setPrix(float p) {prix=p;}
 
 public float getDureeGarantie() {return dureeGarantie;}
 public void setDureeGarantie(float dg) {dureeGarantie=dg;}

 public float getDureeFabrication() {return dureeFabrication;}
 public void setDureeFabrication(float df) {dureeFabrication=df;}

//Autres methodes-----------------------------------------------------------
 
 public String toString()
   {return super.toString()+"-de base-";}

 public float prix() {return prix;}
 
 public float dureeGarantie() {return dureeGarantie;}

 public float dureeFabrication() {return dureeFabrication;}

 public String prefixe() {return "00"+super.reference();}

}



Est-ce une erreur de mon classpath ou de mon code?
Je comprends vraiment rien, mon code me semblait juste pourtant.
Si vous pouviez m'aider, je vous en serais très reconnaissante.
Cordialement.
Afficher la suite 

13 réponses

Meilleure réponse
Messages postés
18
Date d'inscription
dimanche 6 décembre 2009
Statut
Membre
Dernière intervention
15 juillet 2010
5
4
Merci
Naturellement,

Il ne s'agissait donc pas d'erreurs dans mon code java mais bel et bien de commandes via le terminal.
Alors pour ceux qui ont les mêmes erreurs de compilation dans un cas d'héritage simple, vous devez compilez vos super classes et sous classes en même temps et une seule fois par :

javac SuperClasse.java SousClasse1.java SousClasse2.java


Dans mon cas, c'était:

javac Piece.java PieceDeBase.java PieceComposite.java PieceCompositeEnKit.java PieceAssemblee.java MainPiece.java


Voila, pour moi ça a super bien marché et tout s'exécute parfaitement.

@+

Dire « Merci » 4

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 54639 internautes nous ont dit merci ce mois-ci

Messages postés
28884
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
17 juillet 2019
6601
0
Merci
Le soucis, c'est que ce n'est pas un problème linux mais un problème de programmation, car il est vraiment lié à ton code. Premier conseil que je te donne, c'est de développer avec eclipse (qui s'installe via ton gestionnaire de paquets linux). Celui-ci t'aidera fortement à corriger ton erreur.

D'un point de vue java, si tu veux utiliser une class A dans un fichier B.java il faut :
- que la classe A soit publique (et importer le package de A),
- que A et B soient dans le même package

Si le problème persiste, pose ta question sur le forum programmation.

Bonne chance
Messages postés
18
Date d'inscription
dimanche 6 décembre 2009
Statut
Membre
Dernière intervention
15 juillet 2010
5
0
Merci
Merci pour ta réponse Mamiemando.
Juste pour rebondir à ta remarque, ma classe A (Pïece) est bien publique et toutes mes classes sont dans le même package à savoir Prog.Pieces alors je ne sais pas trop :?
Je ne sais hélas pas utiliser Eclipse du tout, j'utilise le sun java 6 et je compile à travers le shell (je suis débutante).
J'ai plus l'impression que mon problème vient de mon classpath mais je suis pas sure :S
Je vais faire un tour du côté programmation.

Juste une question, comment tu fais pour importer une super classe que tu as créee dans une sous classe?
Car j'ai aussi essayé d'importer tout le package dans la sous classe par:

import Prog.Pieces.*; 


Mais j'ai les mêmes erreurs :S

Merci encore xxx
Messages postés
28884
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
17 juillet 2019
6601
0
Merci
Je ne sais hélas pas utiliser Eclipse du tout, j'utilise le sun java 6 et je compile à travers le shell (je suis débutante).

Raison de plus pour utiliser eclipse :-)
http://doc.ubuntu-fr.org/eclipse
http://www.siteduzero.com/tutoriel-3-10601-programmation-en-java.html

Pour voir ce qui cloche dans ton programme il faudrait le source complet (mets une archive avec ton code sur rapidshare et donne-nous le lien ?)

Bonne chance
mickeynad
Messages postés
18
Date d'inscription
dimanche 6 décembre 2009
Statut
Membre
Dernière intervention
15 juillet 2010
5 -
Et bien hier soir j'ai fait comme tu m'as dit et je me suis mise à utiliser Eclipse à l'aide de quelques tutoriels que j'ai trouvé sur le net. Et en effet, l'erreur que j'avais était plus clairement identifiée. Il semble que le nom de mon package pose un problème. Alors lorsque j'ai supprimé ceci:
package Prog.Pieces;

dans mes sous classes, tout est parfaitement compilé et je peux exécuter mes programmes sans problèmes mais si je le rajoute, j'ai l'erreur comme quoi ma super classe Piece ne peut pas être retrouvée dans mes sous classes :S (quand bien même ma super classe Piece est parfaitement compilée que je rajoute le nom du package ou pas :S)

Je vais mettre mon code sur rapidshare.
Merci encore pour ton aide et pour tes liens :)
Messages postés
28884
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
17 juillet 2019
6601
0
Merci
Désolée tes messages sont automatiquement supprimés car manifestement la moulinette CCM ne permet pas de soumettre des liens rapidshare. Essaye avec un autre site.
Messages postés
18
Date d'inscription
dimanche 6 décembre 2009
Statut
Membre
Dernière intervention
15 juillet 2010
5
0
Merci
j'ai réglé mon pb sur un autre site, merci.
Messages postés
28884
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
17 juillet 2019
6601
0
Merci
Ah parfait. Si tu peux juste nous dire d'où venait le problème, comme ça on pourra clore le sujet proprement.

Bonne chance
Messages postés
28884
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
17 juillet 2019
6601
0
Merci
Merci pour toutes ces précisions. Pour la compilation en ligne de commande, je t'invite à t'intéresser à des outils comme make ou ant, qui te simplifieront grandement la vie. À noter que des IDE comme eclipse permettent de s'affranchir de se genre de considérations (tu cliques sur le bouton "lecture" et c'est parti).

Bonne chance
Messages postés
18
Date d'inscription
dimanche 6 décembre 2009
Statut
Membre
Dernière intervention
15 juillet 2010
5
0
Merci
Je ne manquerai pas de m'y intéresser de plus près, surtout Eclipse, je trouve cet outil génial, merci à toi^^
Messages postés
28884
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
17 juillet 2019
6601
0
Merci
Pas de soucis, bonne continuation ;-)
Messages postés
18
Date d'inscription
dimanche 6 décembre 2009
Statut
Membre
Dernière intervention
15 juillet 2010
5
0
Merci
:-))
0
Merci
j'ai résolu le problème en diminuant la taille du nom de mes classes
0
Merci
j'ai le même problème et je n'arrive pas le résoudre qlqn peut m'aider SVP ?
mamiemando
Messages postés
28884
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
17 juillet 2019
6601 -
Ce problème est résolu, merci d'ouvrir un nouveau fil de discussion en précisant le message d'erreur.