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

Error: called object 'soma' is not a function or function pointer|

Olá!

Estou tentando fazer a soma de números utilizando ponteiros, porém fica retornando o erro "error: called object 'soma' is not a function or function pointer|" . Poderiam apontar onde está o erro? Segue o eu código:

#include <stdio.h>

void soma (int* num1,int* num2,int* calculo) { (calculo) = (num1) + (*num2); printf ("\nA soma dos numeros e: %d",soma); }

int main (){ int num1,num2,soma; printf ("****Soma utilizando funcoes e ponteiros!*** \n*"); soma (&num1,&num2,&soma); printf("Digite o primeiro numero: "); scanf("%d", &num1); printf("\nDigite o segundo numero: "); scanf("%d", &num2);

}

2 respostas
solução!

Olá Daniel, tudo bem com você?

Esse erro aconteceu pois o nome da função soma(), é o mesmo nome da variável soma declarada dentro da função main(), gerando um conflito de nomes para o compilador, pois quando ele tenta chamar a função soma(), tenta chamar a partir da variável, que é um ponteiro para um inteiro.

Outro ponto, dentro da função soma, está sendo recebido o ponteiro *calculo, mas dentro da função printf() está sendo referenciado a variável soma, que não existe nesse caso. Além disso, na linha

(calculo) = (num1) + (*num2); 

é necessário fazer a derreferenciação das variáveis calculo e num1, assim como está acontecendo com num2, para evitar que a linguagme C trate-as como se fossem ponteiros, mas sim como números inteiros aos quais os ponteiros estão apontando. Segue o código da função soma():

void soma (int* num1,int* num2,int* calculo) { 
  (*calculo) = (*num1) + (*num2);
  printf ("\nA soma dos numeros e: %d", *calculo); 
}

Assim, garantindo a derreferenciação e utilizando a variável calculo ao invés de soma.

Por fim, é interessante trocar o nome da variável soma, dentro da função main, para calculo, ou qualquer outro nome de preferência, ao não ser soma:

int num1,num2, calculo;

E é importante lembrar, também, que a função soma() está sendo chamada antes de definirmos quais são o num1 e num2, ou seja, não está acontecendo no momento ideal, pois é depois que definimos os números que queremos saber qual o valor de sua soma. Para resolver isso, podemos escreve a função main():

int main (){ 
  int num1,num2, calculo;
  printf ("****Soma utilizando funcoes e ponteiros!*** \n*"); 
  printf("Digite o primeiro numero: "); 
  scanf("%d", &num1); 
  printf("\nDigite o segundo numero: "); 
  scanf("%d", &num2);
  soma(&num1, &num2, &calculo);
}

Assim, o programa inicia, lê os dois números inteiros num1 e num2 e por fim faz a soma e exibe o resultado na tela, utilizando a variável calculo.

Ponteiros é um assunto bem complicado dentro da linguagem C e é normal se deparar com muitos erros no início; não se preocupe, eles fazem parte da sua evolução!, em breve, você vai perceber como eles serão cada vez menos frequentes!

Fico à disposição em caso de dúvidas.

Um grande abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Perfeito, Arthur! Obrigado por me ajudar nessa!!