"Cannot find symbol" für meine eigene Klasse
Ich nicht ein %CLASSPATH% set up. So wie ich das verstehe, sollte dies nicht ein problem sein, da Javac davon aus classpath das aktuelle Verzeichnis.
Wie Sie unten sehen können, javac nicht finden kann, wird mein Case
Klasse, obwohl es im gleichen Verzeichnis. Irgendwelche Gedanken auf, warum dies passiert ist? Dieser code funktioniert wunderbar, wenn ich Eclipse verwenden.
C:\Documents and Settings\joep\My Documents\GCJ\src\codejam2011\Round0\D>dir /B
Case.class
Case.java
EntryPoint.java
C:\Documents and Settings\joep\My Documents\GCJ\src\codejam2011\Round0\D>javac EntryPoint.java
EntryPoint.java:16: cannot find symbol
symbol : class Case
location: class codejam2011.Round0.D.EntryPoint
ArrayList<Case> cases = new ArrayList<Case>();
^
EntryPoint.java:16: cannot find symbol
symbol : class Case
location: class codejam2011.Round0.D.EntryPoint
ArrayList<Case> cases = new ArrayList<Case>();
^
EntryPoint.java:24: cannot find symbol
symbol : class Case
location: class codejam2011.Round0.D.EntryPoint
cases.add(new Case(new Integer(count), line));
^
3 errors
C:\Documents and Settings\joep\My Documents\GCJ\src\codejam2011\Round0\D>
Update 1:
Nach dem Versuch zu kompilieren, mein Paket root (src), bekomme ich eine neue Fehlermeldung (auch nach dem löschen der Case.class Datei)
C:\Documents and Settings\joep\My Documents\GCJ\src>javac -cp . codejam2011/Round0/D/EntryPoint.java
codejam2011\Round0\D\EntryPoint.java:16: cannot access codejam2011.Round0.D.Case
bad class file: .\codejam2011\Round0\D\Case.java
file does not contain class codejam2011.Round0.D.Case
Please remove or make sure it appears in the correct subdirectory of the classpath.
ArrayList<Case> cases = new ArrayList<Case>();
^
1 error
C:\Documents and Settings\joep\My Documents\GCJ\src>
Update 2:
Es scheint zu sein, greifen die Case.java Datei aus einem anderen Paket.
C:\Documents and Settings\joep\My Documents\GCJ\src>javac -d ../classes codejam2011\Round0\D\*.java
.\codejam2011\Round0\D\Case.java:4: duplicate class: codejam2011.Round0.C.Case
public class Case
^
codejam2011\Round0\D\EntryPoint.java:16: cannot access codejam2011.Round0.D.Case
bad class file: .\codejam2011\Round0\D\Case.java
file does not contain class codejam2011.Round0.D.Case
Please remove or make sure it appears in the correct subdirectory of the classpath.
ArrayList<Case> cases = new ArrayList<Case>();
^
2 errors
C:\Documents and Settings\joep\My Documents\GCJ\src>
- Hast du import-Klasse Fall in EntryPoint?
- Das ist nicht notwendig, da es im selben Paket.
- Studium haben Sie die Fehlermeldungen?
duplicate class: codejam2011.Round0.C.Case
Es gibt C-und D - eine Mehrdeutigkeit. Sie haben, um einige Importe, oder geben Sie ausdrücklich die Falle, codejam2011.Round0.C.Fall oder codejam2011.Round0.D....Fall du meinst. - Sie sind in verschiedenen Paketen, obwohl. Warum sollte der compiler verwirrt und versuchen, ein von einem anderen Paket?
- Ich habe nicht einen überblick über Ihre source-dir(s), dein Ziel dir(s), dem aktuellen Verzeichnis, Umgebungsvariablen und die Geschichte Ihrer Aktionen. Sie sollten beginnen, das löschen aller alten Klassen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie kompilieren Sie das Paket root, nicht aus dem inneren des Pakets.
So,
cd
zu densrc
Ordner und kompilieren es.Update: wie pro Ihre neuen problem, müssen Sie neu kompilieren zu müssen
Case.java
auf die gleiche Weise. Es war offenbar kompiliert die gleichen falschen Weg (aus dem Paket)..
und ich bin mit Pakete -- vielleicht das ist, warum es nicht funktioniert? Mein Paket ist codejam2011.Round0.DWenn das problem ist noch nicht gelöst, durch kompilieren aus dem Paket root-Verzeichnis (siehe die anderen Antworten):
So, wenn die Datei
codejam2011\Round0\D\Case.java
es sollte enthaltenpackage codejam2011.Round0.D;
als die erste Deklaration, und dannpublic class Case { ... }
. Auch, stellen Sie sicher, es gibt keine andere source-Datei mit dem Paket-und Klassen-Deklaration.Aus deiner Fehlermeldung sieht es so aus das package-Anweisung ist
package codejam2011.Round0.C;
statt (und Sie haben auch eine KlasseCase
in der realencodejam2011.Round0.C
Paket).Sind Sie in das falsche Verzeichnis für die Kompilierung.
Sagt mir, dass Ihr Paket codejam2011.Round0.D (das ist gegen die Konvention (alles Kleinbuchstaben), aber neben dem Punkt ...
cd der übergeordneten dir von codejam2011, die src, nicht wahr?
könnte den trick tun.
Oft haben Sie ein Verzeichnis für die kompilierten Klassen, wie 'bin' oder 'Klassen'. Zum erzeugen der Klassen, verwenden Sie -d (destination):
javac -d ../classes codejam2011\Round0\D\*.java
.javac -d ../classes codejam2011\Round0\D\*.java
? Errormessage?Ich habe ähnliches Problem, es könnte nicht für alle Fälle, aber was ich getan habe, ist zu entfernen .gradle, build-und out-Ordner und aktualisieren Sie das Programm erneut.