[Resolvido] Erro no C# através de métodos - C# - Portugal-a-Programar
[Resolvido] Erro no C# através de métodos
November 29, 2015 in C#
Olá pessoal,sou novo no fórum e percebi que o fórum é muito bem organizado e com bastante pessoas com muito conhecimento e com vontade de ajudar os outros,então vim para cá para ver se alguém pode me ajudar com um problema.
O problema é o seguinte,estou usando uma classe chamada Custos que recebe os objetos por parâmetro das outras classes(tem outras 3 classes),que soma todos os objetos das classes e exibe todos os atributos de todas as classes.
Aqui está como eu fiz lá no Visual Studio :
public double totalViagem(Alimentação A,Transporte T,Hospedagem H) {
valorViagem = A.calcularDespesa + T.calcularDespesa + H.calcularDespesa;
return valorViagem;
Cada uma sendo uma Classe,e estou chamando um método chamado calcularDespesa de cada Classe.
Só que ao tentar isto,ocorre este problema : "Operator + cannot be applied to operands type method group and method group".Basicamente ele esta dizendo que não pode aplicar no tipo dos métodos.
Mas não sei por que está ocorrendo este problema,se alguém puder me ajudar,eu irei agradecer mesmo,pois preciso entregar este Projeto,já que faz parte da prova final de C# do meu curso de programação.
OBS : Me desculpem se o formato deste post esta todo errado,é minha primeira vez que eu posto.
Edited November 29, 2015 by Mav3r1cK
Precisas de usar () ao chamar métodos, tipo calcularDespesa() em vez de calcularDespesa... também vieste do vb para c#? Syntax muda um bocadinho 😛
Comecei faz alguns meses no C# através do curso de Programação que estou fazendo,e começamos métodos a uns 2 meses,as vezes me confundo com a sintaxe de métodos do Java,hahaha.
Então amigo,o que você falou deu certo,mas agora aparece outro erro,ele aparace assim : "No overload for method calcularDespesa() takes 0 arguments"
Ele aparece este erro no da classe Alimentação,que tem uma variável dentro do método,chamado qtdeRef,que é quantidade de Refeições,pois estou usando uma fórmula,valorTotal = qtdeRef * 18.
E ele aparece assim também antes de aparecer este erro : "void Alimentação.calcularDespesa(int qtdeRef)".
É porque tens parametros no método, por exemplo, declaras-te tipo assim:
static int calcularDespesa(int despesatotal, int lucrototal) {
Ou seja, ao chamares o método calcularDespesa precisas de fornecer 2 ints neste caso.
Eu estou usando assim :
public void calcularDespesa(int qtdeRef) {
valorTotal = qtdeRef * 18;
O exercício que estou fazendo,pede que seja void o método.
Mesmo assim da ainda para fazer deste jeito ?
OBS : Desculpe se estou perguntando demais,haha.
Não, porque pensa, tu acima estás a fazer isto:
valorViagem = A.calcularDespesa() + T.calcularDespesa() + H.calcularDespesa();
Se os métodos acima forem void, eles não retornam nenhum valor, ou seja, tás a adicionar nada basicamente porque o código não vai compilar, têm de ser uma função da maneira que estás a fazer, e retornas o valor nessa função.
Os parametros não têm nada a ver com void/função para o teu problema anterior, tens de a chamar na mesma como calcularDespesa(int) .
Se o exercicio te obriga a usar void não faz muito sentido nesse caso, porque a única maneira de somares seria declarares uma variável global (fora de métodos/funções) que fosse 'partilhada' por essas classes e assim podias somar em todos os métodos na mesma variável, mas isso não faz muito sentido na minha opinião...
Sim foi o que eu pensei,pois o exercício pede claramente que os métodos sejam void,mas ai estas o problema,como somar sendo que são void ? Vou tentar arrumar do jeito que tu falaste e depois eu posto aqui os resultados.
Mas qualquer coisa desde já agradeço por me ajudar.
Olha o que ele pede na classe Custos que esta estes códigos :
Classe Custos : Recebe os objetos por parâmetro e exibe todos os atributos de todas as classes e o valor total da viagem.
Não dá para somares void, porque o método não retorna um valor, se és obrigado a usar void, soma numa variável e mostras ao utilizador por uma messagebox se tiveres a usar winforms, escusas de complicar mais que isto, recebes os valores, fazes o que tens a fazer e mostras o resultado final, terias que usar uma variável 'global' se diferentes classes para isso são precisas. basta declarares uma variável 'static int x = 0' e importares a classe para cada classe que precisas de aceder, usando 'using' da mesma maneira que fazes import de 'using system.windows.forms'
Sim olha o que eu fiz até agora,este é meu formulário : http://imgur.com/M6FDSDq
Vou tentar fazer do jeito que você fez,mas ai só poderei ter um botão para calcular tudo certo ?
O botão não têm nada a ver, podes por o código onde quiseres, dependendo como quiseres fazer... tu tavas a somar tudo numa linha, calculo que seja só um bloco de código... então é fácil.
Bom amigo,tu me ajudaste bastante,muito obrigado!
Já consegui resolver meu problema,fiz pesquisas e por final,mesmo no exercício pedindo private eu coloquei as variáveis como public e ocorreste tudo certo.
Afinal,o exercício estava errado,não tinha de jeito nenhum eu acessar variáveis private de classes public com métodos public.