[Error] invalid conversion from 'int' to 'int*' [RESOLVIDO]

1. [Error] invalid conversion from 'int' to 'int*' [RESOLVIDO]

Larissa Carolina Freire Mapa
LariWilson

(usa Outra)

Enviado em 30/04/2021 - 19:32h

Fiz essa biblioteca pra um trabalho, mas não sei o que esta errado com ela ou com a forma que estou testando.
Já testei de varias formas, usando *&, *, &, &* e nenhum dos dois, em todos os lugares, mas não consigo de forma alguma.
Boa porcentagem da minha nota depende desse trabalho, e ja não sei o que fazer



#include <iostream>
#include <stdlib.h>
#include <string.h>

struct Personagens {
Personagens *proximo;
char nome[30];
int ataque;
int vida;
int selec;
};

void criarPersonagens ( Personagens *&prim, int *&vidas, int *&ataques){
//printf ("%i\n\n", selec);
int selec;
Personagens *m, *exib;
m = new (Personagens);

strcpy(m-> nome,"Mago");
m->ataque = 175 ;
m->vida = 1750;
m->selec=1;
prim = m;

Personagens *a;
a = new (Personagens);

strcpy(a-> nome,"Arqueiro");
a->ataque = 200 ;
a->vida = 1500;
a->selec=2;
m->proximo = a;

Personagens *g;
g = new (Personagens);

strcpy(g-> nome,"Guerreiro");
g->ataque = 150;
g->vida = 2000;
g->selec=3;

a->proximo = g;
g->proximo = NULL; //nao haverá mais personagens
exib=prim;
while(prim!=NULL) { //Quando o ponteiro apontar para NULL, quer dizer que chegou no final da lista <<<<<<<<<<<<
printf("Classe: %s\n Vida:%i\n Ataque:%i\n Numero de seleção:%i \n________________________\n ", prim->nome, prim->vida, prim->ataque, prim->selec); // Imprime as informações para onde o ponteiro aponta
prim = prim->proximo;
}
printf("Digite o numero de seleção da Classe que deseja escolher: ");
scanf("%i", selec);
prim=exib;
while(prim!=NULL) { //Quando o ponteiro apontar para NULL, quer dizer que chegou no final da lista <<<<<<<<<<<<
if (selec==prim->selec ){
*vidas= prim->vida;
*ataques= prim->ataque;

}

prim = prim->proximo; //Faz o ponteiro apontar para o próximo elemento da lista encadeada
}
prim=exib;

}





E estou usando o seguinte pra testar, desta vez, mas ja editei ela e os parâmetros varias vezes:


#include <iostream>
#include "Personagens.h"
#include <stdlib.h>

int main (){
int escolha=0, vida, ataque;
int *e, *v, *a;
e=&escolha;
v=&vida;
a=&ataque;


Personagens *p;
criarPersonagens(p,v, a );
//escolherPersonagens(p);

printf("A seleção é %i", escolha);

}



  


2. Re: [Error] invalid conversion from 'int' to 'int*' [RESOLVIDO]

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 01/05/2021 - 04:28h

Corrigi seu programa, tava até que bem fácil de fazer:
#include <iostream>
#include <stdlib.h>
#include <string.h>

struct Personagens {
Personagens *proximo;
char nome[30];
int ataque;
int vida;
int selec;
};

void criarPersonagens ( Personagens *prim, int *vidas, int *ataques){
//printf ("%i\n\n", selec);
int selec;
Personagens *m, *exib;
m = new (Personagens);

strcpy(m-> nome,"Mago");
m->ataque = 175 ;
m->vida = 1750;
m->selec=1;
prim = m;

Personagens *a;
a = new (Personagens);

strcpy(a-> nome,"Arqueiro");
a->ataque = 200 ;
a->vida = 1500;
a->selec=2;
m->proximo = a;

Personagens *g;
g = new (Personagens);

strcpy(g-> nome,"Guerreiro");
g->ataque = 150;
g->vida = 2000;
g->selec=3;

a->proximo = g;
g->proximo = NULL; //nao haverá mais personagens
exib=prim;
while(prim!=NULL) { //Quando o ponteiro apontar para NULL, quer dizer que chegou no final da lista <<<<<<<<<<<<
printf("Classe: %s\n Vida:%i\n Ataque:%i\n Numero de seleção:%i \n________________________\n ", prim->nome, prim->vida, prim->ataque, prim->selec); // Imprime as informações para onde o ponteiro aponta
prim = prim->proximo;
}
printf("Digite o numero de seleção da Classe que deseja escolher: ");
scanf("%i", &selec);
prim=exib;
while(prim!=NULL) { //Quando o ponteiro apontar para NULL, quer dizer que chegou no final da lista <<<<<<<<<<<<
if (selec==prim->selec ){
*vidas= prim->vida;
*ataques= prim->ataque;

}

prim = prim->proximo; //Faz o ponteiro apontar para o próximo elemento da lista encadeada
}
prim=exib;
}

int main (){
int escolha=0, vida, ataque;
int *e, *v, *a;
e=&escolha;
v=&vida;
a=&ataque;


Personagens *p;
criarPersonagens(p,v, a );
//escolherPersonagens(p);

printf("A seleção é %i", escolha);
return 0;
}

Não vou falar muito porque nem dormi ainda, mas você tem que entender que: scanf, recebe como argumento um endereço para uma váriável do tipo especificado no formato. Sendo assim, scanf("%i", &selec) é o certo e você colocou antes sem o & no lado do select.
Sugiro que estude sobre ponteiros e alocação de memória, se é que já não está fazendo isso. Procure aqui no fórum, o Paulo já escreveu bastante coisa a respeito disso.

____________________________________________
https://nerdki.blogspot.com/ acessa aí vai lá, é grátis!
Capeta (demo) do meu trabalho:
https://github.com/cpusam
“uma nova verdade científica não triunfa pelo convencimento dos seus oponentes e nem se fazendo com que eles vejam a luz, mas sim porque esses oponentes eventualmente morrem e uma nova geração cresce já familiarizada com a nova teoria.” Max Planck



3. Obrigada

Larissa Carolina Freire Mapa
LariWilson

(usa Outra)

Enviado em 01/05/2021 - 04:55h

SamL escreveu:

Corrigi seu programa, tava até que bem fácil de fazer:
#include <iostream>
#include <stdlib.h>
#include <string.h>

struct Personagens {
Personagens *proximo;
char nome[30];
int ataque;
int vida;
int selec;
};

void criarPersonagens ( Personagens *prim, int *vidas, int *ataques){
//printf ("%i\n\n", selec);
int selec;
Personagens *m, *exib;
m = new (Personagens);

strcpy(m-> nome,"Mago");
m->ataque = 175 ;
m->vida = 1750;
m->selec=1;
prim = m;

Personagens *a;
a = new (Personagens);

strcpy(a-> nome,"Arqueiro");
a->ataque = 200 ;
a->vida = 1500;
a->selec=2;
m->proximo = a;

Personagens *g;
g = new (Personagens);

strcpy(g-> nome,"Guerreiro");
g->ataque = 150;
g->vida = 2000;
g->selec=3;

a->proximo = g;
g->proximo = NULL; //nao haverá mais personagens
exib=prim;
while(prim!=NULL) { //Quando o ponteiro apontar para NULL, quer dizer que chegou no final da lista <<<<<<<<<<<<
printf("Classe: %s\n Vida:%i\n Ataque:%i\n Numero de seleção:%i \n________________________\n ", prim->nome, prim->vida, prim->ataque, prim->selec); // Imprime as informações para onde o ponteiro aponta
prim = prim->proximo;
}
printf("Digite o numero de seleção da Classe que deseja escolher: ");
scanf("%i", &selec);
prim=exib;
while(prim!=NULL) { //Quando o ponteiro apontar para NULL, quer dizer que chegou no final da lista <<<<<<<<<<<<
if (selec==prim->selec ){
*vidas= prim->vida;
*ataques= prim->ataque;

}

prim = prim->proximo; //Faz o ponteiro apontar para o próximo elemento da lista encadeada
}
prim=exib;
}

int main (){
int escolha=0, vida, ataque;
int *e, *v, *a;
e=&escolha;
v=&vida;
a=&ataque;


Personagens *p;
criarPersonagens(p,v, a );
//escolherPersonagens(p);

printf("A seleção é %i", escolha);
return 0;
}

Não vou falar muito porque nem dormi ainda, mas você tem que entender que: scanf, recebe como argumento um endereço para uma váriável do tipo especificado no formato. Sendo assim, scanf("%i", &selec) é o certo e você colocou antes sem o & no lado do select.
Sugiro que estude sobre ponteiros e alocação de memória, se é que já não está fazendo isso. Procure aqui no fórum, o Paulo já escreveu bastante coisa a respeito disso.

____________________________________________
https://nerdki.blogspot.com/ acessa aí vai lá, é grátis!
Capeta (demo) do meu trabalho:
https://github.com/cpusam
“uma nova verdade científica não triunfa pelo convencimento dos seus oponentes e nem se fazendo com que eles vejam a luz, mas sim porque esses oponentes eventualmente morrem e uma nova geração cresce já familiarizada com a nova teoria.” Max Planck


Moço(a), não faz nem 20 minutos que descobri esse erro do& kkk Mas muito obrigada, serio, achei que, de qualquer forma, ninguém fosse me ajudar, e eu ia acabar entrando em desespero.
Na verdade, sobre os ponteiros em si, eu ate os conheço, por isso fiquei tão frustrada por não conseguir faze-los funcionar, muito pelo fato de ter começado a criar bibliotecas a pouco, e achei que pudesse ser algo com isso, quando na verdade o erro foi apenas uma digitação, que me levou a crer que o erro estaria na passagem de parâmetros por referencia ou valores, e fiquei horas trocando as formas de passagem dos valores sem pensar que o erro pudesse ter sido mais simples que isso.
De qualquer modo, eu sou muito grata a você. Você teria salvo minha nota. Achei que ninguém mais pudesse me ajudar. É um trabalho extenso e coletivo, e nos estamos muito agradecidos pela boa vontade de faze-lo.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts