Erro ao tentar compilar - É básico mas eu não sei como resolver!

6 respostas
A

Pessoal, preciso da ajuda de vcs. Não faço idéia do erro que pode estar acotecendo, só sei que não compila de jeito nenhum.
O que quero fazer é atribuir a variável novavenda para a classe Venda. Abaixo vai o código e o erro que aparece ao tentar compilar o código.

public class mundo
{
public static void main(String[] args) 
{

class Casa {
String cor;
Venda novavenda;
}

class Venda {
int ab;
}

Casa a1 = new Casa();
a1.cor = "azul";
Venda venda = new Venda();
venda.ab = 1;
a1.novavenda = venda;
System.out.println(a1.novavenda.ab);

}
}

Erro ao compilar:

user@user-desktop:~/Área de Trabalho$ javac mundo.java
mundo.java:8: cannot find symbol
symbol  : class Venda
location: class Casa
Venda novavenda;
^
1 error

alguém sabe?

Obrigado

6 Respostas

marcosharbs

cria as classes separadas
e metodos gets e sets para acessar seus atributos

J

Bem vindo ao GUJ :smiley:

cara, não está compilando por um motivo simples, você está declarando a classe Casa e a classe Venda dentro de um método, que é o main. E isso não pode ser feito.
apenas reorganizei seu código, de uma olhada…

public class Mundo{
  public static void main(String[] args) {

     Casa a1 = new Casa();
     a1.cor = "azul";
     Venda venda = new Venda();
     venda.ab = 1;
     a1.novavenda = venda;
     System.out.println(a1.novavenda.ab);

   }
}
class Casa {
  String cor;
  Venda novavenda;
}

class Venda {
  int ab;
}

tenha um pouquinho mais de atenção com as chaves “{}” que delimitam um método ou uma classe :wink:

espero que tenha ajudado… :smiley:
[]'s

E

Cara cria classes separadas, não é boa pratica vc usar varia classes dentro de outra classe, pois isso, não fica Orientado a Objetos.

Faz uma Classe para casa.
Depois, cria outra classe para Venda.

… Depois cria a Classe Mundo e ai vc istancia as classes anteriones.

A

Altere a ordem de declaração da classe Casa e Venda... pois quando vc cria a Casa.. a classe Venda tem que existir

public static void main(String[] args) {   

		class Venda {     <<<<< PRIMEIRO DECLARE A CLASSE VENDA
			int ab;   
		}  
		
		class Casa {   
			String cor;   
			Venda novavenda;   
		}   

		Casa a1 = new Casa();   <<<<< DEPOIS DECLARE A CLASSE CASA
		a1.cor = "azul";   
		Venda venda = new Venda();   
		venda.ab = 1;   
		a1.novavenda = venda;   
		System.out.println(a1.novavenda.ab);   
	}
Isto vai resolver o seu problema, porém o seu código precisa ser melhorado e muitoooooo....

Dicas
- Utilize o padrão definido pela Sun no seu código (nomenclatura de classes Mundo e não mundo, etc)
- Separe em arquivos diferentes as classes
- Crie metodos get's e set's (encapsulamento, etc)
- Tome cuidado com classes internas a métodos !!!
Entre outras coisas..

maior_abandonado

não tem nada a ver com isso que estão falando…

ele pode criar classes dentro de classes SIM…e classes dentro de metodos TAMBÉM… (não q isso seja uma coisa boa…)

pagina 366 do livro da kathy, classes internas de metodo…

o seu problema é com o escopo ao que me parece… dentro da classe interna do metodo, ele tem acesso ao objeto padrão dela (tipo o this dela) e o objeto da classe externa…tipo o this da classe externa… o problema é que a classe venda não esta como objeto da instancia da classe externa mais sim de dentro do método… e ai não encontra…

agora…quanto a ser uma boa pratica eu concordo com o elton_csantana

editando… o astork tem razão…o problema é esse mesmo… e não o escopo como eu tinha imaginado…

A

bã Astork, fiz o que vc disse e deu certinho. Valeu, não tinha me dado conta da ordem das classes. (bem que o Eclipse podia arruma isso também :smiley: )

Em relação as dicas: eu sigo os padrões, o problema é que eu estou trabalhando num código grande. Como seria difícil explicar aquele outro, resolví fazer um rapidinho aqui no gdit e nem cuidei esses detalhes.
Agora, em relação a dividir em arquivos diferentes: Isso eu ainda não aprendi :smiley:

Mas… vlw msmo kra, ajudou bastante.

Criado 15 de janeiro de 2009
Ultima resposta 15 de jan. de 2009
Respostas 6
Participantes 6