Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - error: incompatible types when assigning to type...
Forum - C/C++ - error: incompatible types when assigning to type...

Avatar
RapFan (Normal User)
Newbie


Messaggi: 7
Iscritto: 03/03/2011

Segnala al moderatore
Postato alle 10:06
Venerdì, 22/04/2011
Ciao a tutti!

Sto facendo un programmino che utilizza le liste per calcolare la media e la somma di 25 numeri generati casualmente

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. struct listNode {
  6.         int casual;
  7.         struct listNode *nextPtr;
  8. };
  9. typedef struct listNode ListNode;
  10. typedef ListNode *ListNodePtr;
  11.  
  12. int main(){
  13.        
  14.         int contatore; //funge da indice e da dividendo
  15.         float somma=0; //conterrà la somma dei numeri generati casualmente
  16.        
  17.         ListNodePtr startPtr = NULL; //puntatore all'inizio della lista (che è vuota)
  18.        
  19.         srand(time(NULL)); //randomizzazione
  20.        
  21.         ListNodePtr newPtr; //puntatore al nuovo nodo
  22.         ListNodePtr previousPtr; //puntatore al nodo precedente
  23.         ListNodePtr currentPtr; //puntatore al nodo corrente
  24.        
  25.        
  26.         for(contatore=0; contatore<25; contatore++){
  27.                
  28.                 newPtr= malloc(sizeof(ListNode));// creo un nuovo nodo
  29.                
  30.                 //c'è spazio a sufficenza per creare nodi?
  31.                 if(newPtr!=NULL){
  32.                        
  33.                         newPtr->casual=rand()%99; //genero un numero e lo metto nel nodo
  34.                         somma += newPtr->casual; //aggiorno la somma
  35.                        
  36.                         previousPtr = NULL;
  37.                         currentPtr = *startPtr;
  38.                        
  39.                         //finché sono nella lista e il mio valore è maggiore di quello nel nodo attuale...
  40.                         while(currentPtr!=NULL && newPtr->casual > currentPtr->casual){
  41.                                
  42.                                  previousPtr=currentPtr; //...mi sposto al
  43.                                  currentPtr= currentPtr->nextPtr;// nodo successivo
  44.                                  
  45.                          }//fine ciclo while
  46.                        
  47.                         if (previousPtr==NULL){ //se mi trovo all'inizio della lista
  48.                                
  49.                                 newPtr->nextPtr = *startPtr; //aggiungo il nodo
  50.                                 *startPtr = newPtr;// all'inizio
  51.                                
  52.                         }
  53.                         else { //inserisco il nodo tra previousPtr e currentPtr
  54.                        
  55.                                 previousPtr->nextPtr = newPtr;
  56.                                 newPtr->nextPtr=currentPtr;
  57.                         }
  58.                
  59.                 }//fine del ramo if
  60.                
  61.                 else
  62.                         printf("Non riesco ad allocare memoria!\n");
  63.                
  64.                 }//fine ciclo for
  65.                
  66.                 printf("La media di tutti i valori inseriti nei nodi è: %.2f\n", somma/contatore);
  67.                 printf("La somma di tutti i numeri inseriti nei nodi è: %f\n", somma);
  68.                
  69.                 return 0;
  70.         }//fine programma



Ecco gli errori di compilazione
Codice sorgente - presumibilmente Delphi

  1. mediaconlista.c: In function ‘main’:
  2. mediaconlista.c:37: error: incompatible types when assigning to type ‘ListNodePtr’ from type ‘ListNode’
  3. mediaconlista.c:49: error: incompatible types when assigning to type ‘struct listNode *’ from type ‘ListNode’
  4. mediaconlista.c:50: error: incompatible types when assigning to type ‘ListNode’ from type ‘ListNodePtr’



forse :rofl: ho fatto casino con le typedef ma non capisco come...

Ultima modifica effettuata da RapFan il 22/04/2011 alle 10:09
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
3
Down
V
Segnala al moderatore
Postato alle 11:30
Venerdì, 22/04/2011
1. Alla riga 37 c'è questo assegnamento:
Codice sorgente - presumibilmente Plain Text

  1. currentPtr = *startPtr


*startPtr indica il contenuto puntato da startPtr, ossia una struct di tipo ListNode, mentre currentPtr è un puntatore. Togli l'asteriscto da startPtr oppure mettilo anche davanti a currentPtr, a seconda dei casi.
2. struct listNode* equivale a ListNodePtr, non a ListNode.
3. Come in 1.

Grazie per aver risposto in maniera celere, ho corretto gli errori e adesso va! - RapFan - 22/04/11 20:26
PM