Jump to content

[Resolvido] Erro no C# através de métodos


Mav3r1cK
 Share

Recommended Posts

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 by Mav3r1cK

"O que nós sabemos é uma gota; o que ignoramos é um oceano"

"Verba volant,scripta manent"

Link to comment
Share on other sites

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)".

Edited by Mav3r1cK

"O que nós sabemos é uma gota; o que ignoramos é um oceano"

"Verba volant,scripta manent"

Link to comment
Share on other sites

É porque tens parametros no método, por exemplo, declaras-te tipo assim:

static int calcularDespesa(int despesatotal, int lucrototal) {
//Corpo do método
}

Ou seja, ao chamares o método calcularDespesa precisas de fornecer 2 ints neste caso.

Link to comment
Share on other sites

É porque tens parametros no método, por exemplo, declaras-te tipo assim:

static int calcularDespesa(int despesatotal, int lucrototal) {
//Corpo do método
}

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.

"O que nós sabemos é uma gota; o que ignoramos é um oceano"

"Verba volant,scripta manent"

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Edited by Mav3r1cK

"O que nós sabemos é uma gota; o que ignoramos é um oceano"

"Verba volant,scripta manent"

Link to comment
Share on other sites

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'

Link to comment
Share on other sites

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 que nós sabemos é uma gota; o que ignoramos é um oceano"

"Verba volant,scripta manent"

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Muito obrigado por toda paciência.E pelo apoio.

"O que nós sabemos é uma gota; o que ignoramos é um oceano"

"Verba volant,scripta manent"

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.