GaskiMedlem sedan juni 2000310 inlägg Hej,
Jag har lite problem med min kompilator, jag har två olika klasser varav den ena ser ut så här:
public class Category {
private int id;
private String name;
public Category() {
}
}
Inte så konstig, och den fungerar att kompilera.
Dock när jag har kompilerat ovanstående och skall kompilera:
public class Test {
public Test() {
Category c = new Category();
}
}
Så får jag svaret: cannot resolve symbol på Category.
Varför? Koden är det inget fel på, eller?
CompusaMedlem sedan jan. 20023 327 inlägg Re: cannot resolve symbol
Du kan inte ha en lokal variabel i konstruktorn, gör så här istället:
public class Test {
private Category c;
public Test() {
c = new Category();
}
}
r/
Om du inte vill ha kategorin som en instansvariabel utan som lokalvariabel så går det naturligtvis att ha den i en metod.
public class Test {
public Test() {
// Do something
}
public void createCategory() {
Category c = new Category();
}
}
GaskiMedlem sedan juni 2000310 inlägg Får samma fel, den pekar på Category i deklarationen och på Category i konstruktorn
CompusaMedlem sedan jan. 20023 327 inlägg Lägg till följande överst i båda klasser:
package test;
Jag testade först din kod i netbeans och modifierade sedan enligt ändringarna jag postade ovan och det fungerade.
Dubbelkollade och om du gör så att klasserna tillhör samma paket så ska det fungera. Om du kör i netbeans så kan det ibland vara segt med att ta bort felen, rödunderstrykning på syntax men detta försvinner om du kompilerar.
GaskiMedlem sedan juni 2000310 inlägg Fortfarande samma fel. Tror inte att det är så mycket fel på koden, mer på kompilatorn, använder SDK 1.4.2.
LimeMedlem sedan sep. 2001961 inlägg Hur ser katalogstrukturen ut?
Hur ser javac-kommandot ut?
Ett bra "standardsätt" när man håller på med java-programmering är att dela upp källkod och klasser så att man skapar en katalog som heter src och en som heter bin.
Exempel:
d:\Project\Java\test1\src\
och
d:\Project\Java\test1\bin\
under src ska filerna helst ligga i samma struktur som paketstrukturen men det är inte nödvändigt. Det finns dock en poäng med det...
När du sedan kompilerar så ställer du dig i src-katalogen och skriver:
d:\Project\Java\test1\src\ >> javac -classpath . -d .\bin *.java
GaskiMedlem sedan juni 2000310 inlägg Det ger tyvärr fortfarande samma felmeddelande. :(
CompusaMedlem sedan jan. 20023 327 inlägg Vilken programvara programmerar du med?
Jodå visst kan man deklarera variabler lokalt i konstruktorn.
Finns flera olika varianter om du ska köra från terminal.
Om du vill kompilera alla filer i aktuell katalog kör
javac *.java
Om du vill ta en fil i taget skriv
javac -classpath . Category.java
javac -classpath . Test.java
Och glöm inte att du måste ha med en main metod sen i nån av klasserna för att kunna köra det.
GaskiMedlem sedan juni 2000310 inlägg Hmmm, om jag tar bort raden package test; så fungerar det...
Men jag måste ju ha med det eftersom det i slutändan ska bli en bean.
Varför fungerar det inte med raden package test; ?
LimeMedlem sedan sep. 2001961 inlägg Okej... då var vi inne på en klassiker... nämeligen vad klasser egentligen heter.
Antar att Category.java ser ut såhär:
package test;
public class Category {
private int id;
private String name;
public Category() {
}
}
Det betyder att klassen EGENTLIGEN heter test.Category.
Om du ska änvända den i klassen Test måste du antingen kalla den för dess fulla namn eller säga till i klassen test att den även skall använda klasser i namnrymden 'test' som klassen Category ligger i.
Det gör man antingen såhär:
public class Test {
public Test() {
// Do something
}
public void createCategory() {
[b]test.Category[/b] c = new [b]test.Category()[/b];
}
}
eller såhär
[b]import test.Category;[/b]
public class Test {
public Test() {
// Do something
}
public void createCategory() {
Category c = new Category();
}
}