webForumDet fria alternativet

cannot resolve symbol

10 svar · 519 visningar · startad av Gaski

GaskiMedlem sedan juni 2000310 inlägg
#1

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
#2

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
#3

Får samma fel, den pekar på Category i deklarationen och på Category i konstruktorn

CompusaMedlem sedan jan. 20023 327 inlägg
#4

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
#5

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
#6

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
#7

Det ger tyvärr fortfarande samma felmeddelande. :(

CompusaMedlem sedan jan. 20023 327 inlägg
#8

Vilken programvara programmerar du med?

Aleph_OneMedlem sedan juni 2003372 inlägg
#9

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
#10

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
#11

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();  
  }    

}
128 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)