Undefined reference to function

di il
12 risposte

Undefined reference to function

Salve la traccia di questo esercizio è
si sviluppi un programma che riceve in ingresso un vettore di interi e che:
1)chieda l'inserimento di n elementi da tastiera
2)stampi a video gli elementi inseriti
3)tramite una funzione che restituisca un numero intero(massimo del vettore) e lo stampi a video
4)stampi a video un elemento e la sua posizione
5)tramite una funzione riordini il vettore
6)tramite una funzione stampi il vettore ordinato
 #include<iostream>
#include<string.h>
using std::cin;
using std::cout;

void stampa(int,int*,int);
int cercamassimo (int,int,int);
void ordinamento(int,int);


int main()
         {int n,i,val,k,h,j,max=0;
          cout<<"inserire la grandezza del vettore \n";
          cin>>n;
          int v[n];
          for(i=0;i<n;i++)
                         {cout<<"\n inserire l'elemento  "<<i+1;
                          cin>>v[i];
                                   }
          for(j=0;j<n;j++)
                         {stampa(n,v,j);
                                         }
          cercamassimo(n,*v,max);
          cout<<" \n quale elemento si vuole ricercare? \n prego inserire valore da ricercare \n";
          cin>>val;
          for(k=0;k<n;k++)
                         {if(v[k]==val)
                             {cout<<"\n l'elemento inserito è stato trovato alla posizione  "<<k+1<<"\n";
                              cout<<"\n l'elemento cercato è "<<val;
                                                                    }
                                                                         }
           ordinamento(n,*v);
           for(h=0;h<n;h++)
                           {stampa(n,v,h);
                                           }
            }



void stampa(int n,int *v,int f)
                              {cout<<" \n elemento ["<<f+1<<"]  :"<<v[f]<<"\n ";
                                                                                  }

int cercamassimo(int n,int *v,int max=0)
                                         {int p;
                                          for(p=0;p<n;p++)
                                                         {if(max<v[p])
                                                              {max=v[p];
                                                                         }
                                                                           }
                                            return max;
                                                            }

void ordinamento (int n,int *v)
                               {int z,x,temp=0;
                                for(z=0;z<n;z++)
                                               {for(x=0;x<n-1;x++)
                                                                  {if(v[x]>v[x+1])
                                                                         {temp=v[x];
                                                                           v[x]=v[x+1];
                                                                           v[x+1]=temp;
                                                                                        }}}}

  
penso di aver fatto un casino con la variabile max ed inoltre dev mi segnala i seguenti errori:
23 traccia esame.cpp undefined reference to `cercamassimo(int, int, int)'
32 traccia esame.cpp undefined reference to `ordinamento(int, int)'

come posso risolvere? grazie mille in anticipo =)

12 Risposte

  • Re: Undefined reference to function

    Correggi le dichiarazioni delle funzioni
  • Re: Undefined reference to function

    In che modo?
  • Re: Undefined reference to function

    Hai messo parametri diversi

    Comunque puoi banalmente mettere il main in fondo e le funzioni prima, senza necessità di definirle
  • Re: Undefined reference to function

    M22.5 ha scritto:


    In che modo?
    Hai scritto

    void ordinamento(int,int);

    e poi

    void ordinamento (int n,int *v)

    Capito?
  • Re: Undefined reference to function

     #include<iostream>
    #include<string.h>
    using std::cin;
    using std::cout;
    
    void stampa(int,int*,int);
    int cercamassimo (int,int*,int);
    void ordinamento(int,int*);
    
    
    int main()
             {int n,i,val,k,h,j,max=0;
              cout<<"inserire la grandezza del vettore \n";
              cin>>n;
              int v[n];
              for(i=0;i<n;i++)
                             {cout<<"\n inserire l'elemento  "<<i+1;
                              cin>>v[i];
                                       }
              for(j=0;j<n;j++)
                             {stampa(n,v,j);
                                             }
              cercamassimo(n,*v,max);
              cout<<" \n quale elemento si vuole ricercare? \n prego inserire valore da ricercare \n";
              cin>>val;
              for(k=0;k<n;k++)
                             {if(v[k]==val)
                                 {cout<<"\n l'elemento inserito è stato trovato alla posizione  "<<k+1<<"\n";
                                  cout<<"\n l'elemento cercato è "<<val;
                                                                        }
                                                                             }
               ordinamento(n,*v);
               for(h=0;h<n;h++)
                               {stampa(n,v,h);
                                               }
                }
    
    
    
    void stampa(int n,int *v,int f)
                                  {cout<<" \n elemento ["<<f+1<<"]  :"<<v[f]<<"\n ";
                                                                                      }
    
    int cercamassimo(int n,int *v,int max=0)
                                             {int p;
                                              for(p=0;p<n;p++)
                                                             {if(max<v[p])
                                                                  {max=v[p];
                                                                             }
                                                                               }
                                                return max;
                                                                }
    
    void ordinamento (int n,int *v)
                                   {int z,x,temp=0;
                                    for(z=0;z<n;z++)
                                                   {for(x=0;x<n-1;x++)
                                                                      {if(v[x]>v[x+1])
                                                                             {temp=v[x];
                                                                               v[x]=v[x+1];
                                                                               v[x+1]=temp;
                                                                                            }}}}
    
      

    penso (spero) di aver corretto secondo tue indicazioni in modo giusto
    chiedo anticipatamente scusa per la resistenza e la difficoltà nello spiegarmi ciò ma purtroppo non avendo studiato i puntatori,il passaggio di array nelle funzioni mi è ostico
    comunque facendo le correzioni sopra indicate ottengo i seguenti errori:
    In function 'int main()':
    23 32 [Error] invalid conversion from 'int' to 'int*' [-fpermissive]
    7 5 [Note] initializing argument 2 of 'int cercamassimo(int, int*, int)'
    32 28 [Error] invalid conversion from 'int' to 'int*' [-fpermissive]
    8 6 [Note] initializing argument 2 of 'void ordinamento(int, int*)'
  • Re: Undefined reference to function

    La dichiarazione dei paramteri non c'entra direttamente con i puntatori. É un altro argomento di studio che devi approfondire.

    Ora mostra la prima linea di codice dove c'è il primo errore e leggi l'errore con attenzione
  • Re: Undefined reference to function

    Cercamassimo(n,*v,max); alla riga 23 nel main principale: quello che penso di aver capito è che ho sbagliato la modalità con la quale ho passato alla funzione i parametri e dunque si trova con passaggi differenti per tipologia riferiti alle stesse variabili nella stessa funzione
    sbaglio?
    il problema è che se non passo il vettore v come puntatore,nella funzione non mi riconosce le operazioni sul p-esimo elemento dello stesso
    se ho centrato il problema:
    come posso risolvere?
  • Re: Undefined reference to function

    Il puntatore è v e non *v

    Quindi devi pasare n,v,max
  • Re: Undefined reference to function

    Ok,ma facendo come hai detto mi ritrovo un doppio errore nella funzione associata alla chiamata che ho precedentemente corretto:
    int cercamassimo(int n,int v,int max=0)
                                             {int p;
                                              for(p=0;p<n;p++)
                                                             {if(max<v[p])
                                                                  {max=v[p];
                                                                             }
                                                                               }
                                                return max;
                                                                }  
    linee: -){if(max<v[p])
    -){max=v[p];

    errore:
    47 69 seconda traccia esame.cpp [Error] invalid types 'int[int]' for array subscript
    48 71 seconda traccia esame.cpp [Error] invalid types 'int[int]' for array subscript
  • Re: Undefined reference to function

    Allora il programma per la maggior parte dei punti ora funziona:effettivamente ho fatto mooolta cofusione sull'uso dei puntatori
    il codice non mi esegue il calcolo del massimo
    "L'ERRORE" corretto il quale mi funziona è l'uso dei prototipi di funzione
    dunque,se possibile, c'è qualcuno che mi sappia dire il perchè i prototipi dichiarati (vedi codice messaggio iniziale) siano sbagliati?
    cosa sbaglio poi nel calcolo del massimo?? (variabile int max)
    di seguito riporto il codice che gira e ottempera al 90% degli scopi dell'esercizio
     
    #include<iostream>
    #include<string.h>
    using std::cin;
    using std::cout;
    
    void stampa(int n,int *v,int f)
                                  {cout<<" \n elemento ["<<f+1<<"]  :"<<v[f]<<"\n ";
                                                                                      }
    
    int cercamassimo(int n,int *v)
                                             {int p,max=0;
                                              for(p=0;p<n;p++)
                                                             {if(max<v[p])
                                                                  {max=v[p];
                                                                             }
                                                                               }
                                                return max;
                                                                }
    
    void ordinamento (int n,int *v)
                                   {int z,x,temp=0;
                                    for(z=0;z<n;z++)
                                                   {for(x=0;x<n-1;x++)
                                                                      {if(v[x]>v[x+1])
                                                                             {temp=v[x];
                                                                               v[x]=v[x+1];
                                                                               v[x+1]=temp;
                                                                                            }}}}
    
    
    int main()
             {int n,i,val,k,h,j,max;
              cout<<"inserire la grandezza del vettore \n";
              cin>>n;
              int v[n];
              for(i=0;i<n;i++)
                             {cout<<"\n inserire l'elemento  "<<i+1;
                              cin>>v[i];
                                       }
              for(j=0;j<n;j++)
                             {stampa(n,v,j);
                                             }
              cercamassimo(n,v);
              cout<<" \n quale elemento si vuole ricercare? \n prego inserire valore da ricercare \n";
              cin>>val;
              for(k=0;k<n;k++)
                             {if(v[k]==val)
                                 {cout<<"\n l'elemento inserito è stato trovato alla posizione  "<<k+1<<"\n";
                                  cout<<"\n l'elemento cercato è "<<val;
                                                                        }
                                                                             }
               ordinamento(n,v);
               for(h=0;h<n;h++)
                               {stampa(n,v,h);
                                               }
                }
    
    
     
    grazie per la pazienza e l'interessamento =)
  • Re: Undefined reference to function

    Devi visualuzzarlo il massimo

    cot << cercamassimo(n,v);
  • Re: Undefined reference to function

    Risolto,grazie mille per il tuo aiuto
Devi accedere o registrarti per scrivere nel forum
12 risposte