"'void' type not allowed here"

while(n.equalsIgnoreCase("I")){ System.out.println("\n* Cadastro de funcionario:\nDigite I para novo funcionario. Digite F para finalizar. Digite E para exibir os dados."); n = t.leString(); System.out.println("_______________________"); if (n.equalsIgnoreCase("F")){ System.exit(0); } else if(n.equalsIgnoreCase("I")){ e = new Funcionario(t.leString("Nome do funcionario: "), t.leDouble("Salario: "), t.leInt("numero de dependentes:"), t.leString("Rua: "), t.leString("Cidade: "), t.leString("UF: "), t.leString("Cep: ")); System.out.println(".............................."); } else if(n.equalsIgnoreCase("E")){ System.out.println("Dados: " + e.exibeDados()); }

Meu problema é com a linha System.out.println("Dados: " + e.exibeDados());
Tá dando a mensagem “‘void’ type not allowed here”

O método exibeDados:

public void exibeDados(){ System.out.println(nome); System.out.println(salario); System.out.println(numDeDependentes); System.out.println(endDoFuncionario); }

Alguma dica? :roll:

Ola,

Simples, o metodo não retorna nada, void, e vc tá tentando imprimir o retorno dele.

Oi natz.

Tentar chamar apenas o método exibeDados() ao invés de chamá-lo dentro de um System.out, pois este aguarda uma string, e como seu método não retorna nada, não vai funcionar.

Nesse lina 01:

System.out.println("Dados: " + e.exibeDados());

Coloque:

e.exibeDados();

[quote=BrunoCarlo]
Simples, o metodo não retorna nada, void, e vc tá tentando imprimir o retorno dele.[/quote]

Sim, mas não tenho como implementar método que retorne, pois são variáveis de tipos diferentes, a não ser que eu faça um método para cada variável. Têm alguma possibilidade de um método retornar variáveis de tipos diferentes?

Vc não precisa retornar, apenas chame o método de imprimir dados. :lol:

Não, mas não funciona, continua dando o mesmo erro…

Eu acho que tem algo errado na sintaxe do método (porque ele fica dizendo que não pode ser void e tal), ou pode ser porque tá chamando dentro do main?
(eu já tirei do main e o erro mudou de face, diz que a variável não foi iniciada, apesar de ela ter sido :S)

vc nao pode usar o comando
System.out.println("Dados: " + e.exibeDados());

pq?

pq vc esta mandando imprimir o retorno do e.exibiDados()…
e o retorno q vc colocou nele é VOID… e void significa q nao retorna nada… entao nao pode ser “imprimido” na tela

ainda agora peguei um erro desse aqui tava tentando imprimir um e.printStackTrace() dentro de um System.out.println, e não da porque a impressao na verdade e feita dentro do metodo, então não faz sentido pedir pra imprimir o retorno dele… se voce quizer mesmo imprimir desse jeito ae, voce tem que rever seu metodo exibeDados, e fazer com que ele retorne uma String.

Aaaaaaaaaaaaaah, tá intendi. Fiz isso, deixei o e.exibeDados(); fora do S.O.PLN(); e deu certo, só que o erro agora é “variable e might not have been initialized”, a variável não foi inicializada, ou “cannot find symbol variable e”, variável e não encontrada .

COMO NÃÃO??

[quote]
O método exibeDados:

public void exibeDados(){ System.out.println(nome); System.out.println(salario); System.out.println(numDeDependentes); System.out.println(endDoFuncionario); }

Alguma dica? :roll: [/quote]

Minha sugestão: substitua o método exibeDados por esse aqui:

public String toString()
{
    return ( nome + "\n" +
                salario + "\n" +
                numDeDependente + "\n" +
                endDoFuncionario + "\n" );
}

Assim você pode concatenar os dados do seu objeto com qualquer string, ou usá-lo como parâmetro para System.out.println()

eh pq a linha

 e = new ...

esta sendo inicializada dentro de um dos IF ELSEs…
entao tem a chance do new nao acontecer…
e o programa mandar executar o metodo exibeDados… sem ela ser inicializada…

por mais q vc possa saber q o codigo funcionaria… o Eclipse nao sabe…
ele trabalho com a possibilidade de tudo acontecer… e pra ele, isso poderia acontecer…

entao vc poderia… colocar o exibeDados dentro do IF ELSE do New…

ou dar NEW antes do IF começar…
ai vc manda setar os valores por um metodo (onde seria o NEW atual q vc esta usando)
e no final exibe

[quote=natz]
Aaaaaaaaaaaaaah, tá intendi. Fiz isso, deixei o e.exibeDados(); fora do S.O.PLN(); e deu certo, só que o erro agora é “variable e might not have been initialized”, a variável não foi inicializada, ou “cannot find symbol variable e”, variável e não encontrada .

COMO NÃÃO??[/quote]

bom ja explicaram acima resumindo… um

Funcionario e = null; no lugar de só Funcionario e; como eu acho que vc pós na declaração deve resolver

yep ^^

Deu certo, programa funcionando :smiley:

Valeu pela ajuda galera, vocês são demaiss ;D