Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Erro na compilação

class TestaEmpresa{
    public static void main(String[] args){
        empresa cola = new empresa();
        cola.empregados = new funcionario[10];

        funcionario f1 = new funcionario();
        f1.salario = 1200;
        empresa.adicionar(f1);

        funcionario f2 = new funcionario();
        f2.salario = 1300;
        empresa.adicionar(f2);

        for(int i=0;i<2;i++){
            empresa.empregados[i].mostra();
        }
    }
}

praticamente copiei o código e deu erro na compilação. alguém me ajuda?

funcionario.java:22: error: non-static method adicionar(funcionario) cannot be referenced from a static context
                empresa.adicionar(f1);
                       ^
funcionario.java:26: error: non-static method adicionar(funcionario) cannot be referenced from a static context
                empresa.adicionar(f2);
                       ^
funcionario.java:29: error: non-static variable empregados cannot be referenced from a static context
                        empresa.empregados[i].mostra();
                               ^
3 errors
6 respostas

Olá Gal! Poste aqui as suas classes Empresa e Funcionario aqui pra gente dar uma olhada.

class empresa{
    String nome;
    String cnpj;
    funcionario[] empregados;

    void adicionar(funcionario f){
        for(int i=0;i<this.empregados.length;i++){
            if(this.empregados[i] == null){
                this.empregados[i] = f;
            }
        }
    }
}
class funcionario{
    String nome;
    String departamento;
    double salario;
    String dataAdmisao;
    String rg;
    data dataEntrada;

    data DataEntrada = new data();

    void aumento(double recebeAumento){
        this.salario+=recebeAumento;
    }

    double calculaGanhoAnual(){
        return this.salario*12;
    }
    void mostra(){
        System.out.println("nome: "+ this.nome);
        System.out.println("Departamento: "+ this.departamento);
        System.out.println("Salatio: "+ this.salario);
        System.out.println("Data de entrada: "+ this.dataEntrada.getFormatada());
        System.out.println("RG: "+ this.rg);
    }
}

Aqui esta

Removi a classe Data porque você não postou e fiquei com preguiça de fazer uma >.<

OBS >> Sempre nomeie as classes com letra maiúscula.

Classe Empresa:


public class Empresa {

    String nome;
    String cnpj;
    Funcionario[] empregados;
    int livre = 0;

    public void adiciona(Funcionario f){
        this.empregados[this.livre] = f;
        this.livre++;
    }

    public void mostraDetalhes() {
        for(Funcionario f : empregados) {
            if (f != null) {
                f.mostra();
            }
        }
    }
}

Classe Funcionário


public class Funcionario {

    String nome;
    String departamento;
    double salario;
    String dataAdmisao;
    String rg;

    void aumento(double recebeAumento){
        this.salario+=recebeAumento;
    }

    double calculaGanhoAnual(){
        return this.salario*12;
    }
    void mostra(){
        System.out.println("========================");
        System.out.println("nome: "+ this.nome);
        System.out.println("Departamento: "+ this.departamento);
        System.out.println("Salatio: "+ this.salario);
        System.out.println("RG: "+ this.rg);
    }

}

Classe TestaEmpresa:


public class TestaEmpresa {

    public static void main(String[] args){

        Empresa cola = new Empresa();
        cola.empregados = new Funcionario[10];

        Funcionario f1 = new Funcionario();
        f1.salario = 1200;
        f1.nome = "Joseph";
        f1.rg = "3333333";
        f1.departamento = "Tecnologia";
        cola.adiciona(f1);

        Funcionario f2 = new Funcionario();
        f2.salario = 1200;
        f2.nome = "McFly";
        f2.rg = "2222222";
        f2.departamento = "Banco";
        cola.adiciona(f2);

        cola.mostraDetalhes();
    }

}
solução!

Gal, na sua classe TestaEmpresa você está invocando os métodos adicionar() e mostra() de forma estática. Não se preocupe se não entender isso agora, você aprenderá sobre métodos e atributos estáticos no último capítulo deste curso.

Mas veja, você instanciou uma nova empresa chamada cola:

empresa cola = new empresa();

É essa instância que você deve utilizar para chamar os métodos:

// excluir estas linhas:
// empresa.adicionar(f1); 
// empresa.adicionar(f2); 
// empresa.empregados[i].mostra();

// incluir estas no lugar
cola.adicionar(f1);
cola.adicionar(f2);
cola.empregados[i].mostra();

Outra coisa, com estas mudanças seu código vai compilar, mas, é uma boa prática iniciar os nomes das classes com letra maiúscula. Então, ao invés de empresa e funcionario escreva Empresa e Funcionario, ok?

Abraços e sucesso nos estudos!

Muito obrigado pessoal!!!

Gal, marque a resposta que mais te ajudou como solução. Assim você ajuda outros colegas com a mesma dúvida!