2010-10-11 8 views
6

Mon expérience de codage ne date que de quelques années, donc cette question devrait être assez simple pour y répondre.Erreur de compilation "Can not Find Symbol"

J'ai écrit deux interfaces: Class et Game. Interface CLASS est censé étendre l'interface GAME.

Voici les deux sources d'interface:

package Impl; 

public interface Game 
{ 
    //METHODS AND VARS 
} 


package Impl;  

public interface Class extends Game 
{ 
    //METHODS AND VARS 
} 

Maintenant, quand je tente de compiler la deuxième interface, je reçois l'erreur suivante

class.java:4: cannot find symbol 
symbol: class Game 
public interface Class extends Game 
          ^

Ma classe de jeu est compilé et le fichier de classe est dans le même répertoire que les deux fichiers java. Je n'ai pas été capable de trouver une solution. Quelqu'un a-t-il une idée?

Répondre

8

Les noms de classes sont sensibles à la casse. Il est possible que vous ayez créé une interface appelée game, mais vous l'appelez dans votre déclaration d'interface Class comme Game, que le compilateur ne peut pas trouver. Cependant, il existe une autre possibilité de compilation à partir de votre package Impl. Pour ce faire, vous devrez référencer votre classpath de sorte que le compilateur puisse trouver des classes à partir de la base de la structure du package. Vous pouvez ajouter un -classpath .. arg à votre javac avant le nom de classe:

javac -classpath .. Class.java 

Vous pouvez faire ce qui est plus fréquent, la compilation de la racine de votre structure de package. Pour ce faire, vous devrez spécifier le chemin vers votre fichier Class:

javac Impl\Class.java 

vous pouvez toujours ajouter un -classpath . être clair.

+0

Merci. Cela a résolu mon problème complètement. J'avais supposé que c'était un problème de codage. – Jay

+7

Jay, je vois que vous êtes nouveau chez StackOverflow (Bienvenue!). Veuillez "Accepter" la solution d'Akf si elle a résolu votre problème. Plus vous aurez de réponses acceptées, plus les gens seront disposés à répondre à vos questions à l'avenir. – AndyG

6

Vous devez lire le fonctionnement des classpaths Java et comment organiser votre code source. Fondamentalement, votre problème est que lorsque le compilateur javac compile "Class.java", il ne s'attend pas à trouver "Game.class" dans le répertoire courant. Il (probablement) le cherche dans "Impl/Game.class".

La page IBM « Managing the Java classpath » fournit une discussion approfondie de la façon de définir votre classpath et comment les utilitaires java (par exemple java et javac) l'utiliser pour trouver des fichiers de classe. La page Oracle "Setting the Classpath" fournit plus d'informations plus succinctement ... mais vous devez le lire attentivement.

Par ailleurs, vous avez des atrocités de style dans votre code:

    noms de paquets
  • Java doivent être dans tous les minuscules.
  • L'appel d'une classe Class est une mauvaise idée car cela entre en collision avec la classe java.lang.Class qui est importée par défaut.