Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Librerie [C++]
Forum - C/C++ - Librerie [C++]

Avatar
cos.peluso (Normal User)
Newbie


Messaggi: 18
Iscritto: 03/01/2018

Segnala al moderatore
Postato alle 17:43
Sabato, 13/01/2018
Sono ancora io, stavolta però con un problema non di codice ma , diciamo così, pratico.
Il mio professore vuole la creazione di librerie (all'esame non è obbligatoria la cosa, ma fa salire di molto il voto finale).
La libreria deve essere costituita da 3 file (salvati nella stessa cartella:

1. nomeprogramma.h

In questo file vuole semplicemente la definzione , senza alcun procedimento, delle funzioni che si utilizzeranno nel main.

2. nomeprogramma.cpp

Qui vuole l'esplicazione delle funzioni .

3. main.cpp

Programma vero e proprio, con soli richiami alle funzioni utilizzate che dovremo prendere dalla libreria da noi creata.


Ora , il punto è questo.
Io ho programmato prima un programma, che mi permettesse di trovare , in una matrice NxN, il massimo della diagonale principale, quello della secondaria e poi confrontarli per trovarne il minimo. Quando ho fatto questo in un unico file.cpp, e l'ho compilato e lanciato non mi ha dato alcun errore e ha fatto ciò che doveva. Il codice è il seguente :

Codice sorgente - presumibilmente C++

  1. //Matrice con minimo
  2. #include<iostream>
  3. using namespace std;
  4.  
  5. int m[20][20];
  6.  
  7. void prendimatrice(int m[20][20],int righecolonne);
  8.  
  9. int maxdiagonaleprincipale(int m[20][20],int righecolonne);
  10. int maxdiagonalesecondaria(int m[20][20],int N);
  11. void minimotramax(int a, int b);
  12.  
  13.  
  14. int main(){
  15.         int N,max1,max2;
  16.         int m[20][20];
  17.        
  18.         cout<<"Inserire il valore NxN : "<<endl;
  19.         cin>> N;
  20.        
  21.         prendimatrice(m,N);
  22.        
  23.         max1=maxdiagonaleprincipale(m,N);
  24.        
  25.         max2=maxdiagonalesecondaria(m,N);
  26.        
  27.         cout<<"Il massimo della diagonale principale e' "<<max1<<endl;
  28.         cout<<"Quello della diagonale secondaria e' "<<max2<<endl;
  29.        
  30.         minimotramax(max1,max2);
  31.        
  32.        
  33.        
  34.        
  35.        
  36. }
  37.  
  38. void prendimatrice(int m[20][20],int righecolonne){
  39.         int i,j;
  40.         for(i=0;i<righecolonne;i++)
  41.         for(j=0;j<righecolonne;j++){
  42.                 cout<<"M[ "<< i+1 << " , "<< j+1<< " ]=";
  43.                 cin>>m[i][j];
  44.         }
  45. }
  46.  
  47. int maxdiagonaleprincipale(int m[20][20],int righecolonne){
  48.         int i,j,max;
  49.         max=m[0][0];
  50.         for(i=0;i<righecolonne;i++)
  51.         for(j=0;j<righecolonne;j++){
  52.                 if(m[i][i]>max)
  53.                 max=m[i][i];
  54.         }
  55.        
  56.         return max;
  57.         }
  58.        
  59. int maxdiagonalesecondaria(int m[20][20],int N){
  60.         int i,j,max;
  61.         max=m[0][N];
  62.         for(j=N-1;j>=0;j--)
  63.         for(i=0;i<N;i++){
  64.                 if(m[i][j]=m[i][N-1-i])
  65.                 if(m[i][j]>max)
  66.                 max=m[i][j];
  67.                 }
  68.        
  69.         return max;    
  70. }      
  71.  
  72. void minimotramax(int a,int b){
  73.         int min;
  74.         min=a;
  75.         if(b<a)
  76.         min=b;
  77.        
  78.         cout<<"Il minimo tra i due e' : "<<min<<endl;
  79. }



Dopodichè, visto che il mio programma funzionava come dovuto, ho creato la mia libreria.Vi posto i 3 file per vedere dove sta l'errore.

matrici.h

Codice sorgente - presumibilmente C++

  1. //Libreria per calcolare massimo della diagonale principale e secondaria di una matrice quadrata.
  2.  
  3. //Definizione della matrice
  4.  
  5. typedef int matrice[20][20];
  6.  
  7. //definizione delle funzioni utilizzate nell'esecuzione del programma
  8.  
  9. void prendimatrice(int m[20][20],int righecolonne);
  10. int maxdiagonaleprincipale(int m[20][20],int righecolonne);
  11. int maxdiagonalesecondaria(int m[20][20],int N);
  12. void minimotramax(int a, int b);



matrici.cpp

Codice sorgente - presumibilmente C++

  1. #include"matrici.h"
  2.  
  3. void prendimatrice(int m[20][20],int righecolonne){
  4.         int i,j;
  5.         for(i=0;i<righecolonne;i++)
  6.         for(j=0;j<righecolonne;j++){
  7.                 cout<<"M[ "<< i+1 << " , "<< j+1<< " ]=";
  8.                 cin>>m[i][j];
  9.         }
  10. }
  11.  
  12. int maxdiagonaleprincipale(int m[20][20],int righecolonne){
  13.         int i,j,max;
  14.         max=m[0][0];
  15.         for(i=0;i<righecolonne;i++)
  16.         for(j=0;j<righecolonne;j++){
  17.                 if(m[i][i]>max)
  18.                 max=m[i][i];
  19.         }
  20.        
  21.         return max;
  22.         }
  23.        
  24. int maxdiagonalesecondaria(int m[20][20],int N){
  25.         int i,j,max;
  26.         max=m[0][N];
  27.         for(j=N-1;j>=0;j--)
  28.         for(i=0;i<N;i++){
  29.                 if(m[i][j]=m[i][N-1-i])
  30.                 if(m[i][j]>max)
  31.                 max=m[i][j];
  32.                 }
  33.        
  34.         return max;    
  35. }      
  36.  
  37. void minimotramax(int a,int b){
  38.         int min;
  39.         min=a;
  40.         if(b<a)
  41.         min=b;
  42.        
  43.         cout<<"Il minimo tra i due e' : "<<min<<endl;
  44. }



main.cpp

Codice sorgente - presumibilmente C++

  1. //Matrice con minimo
  2. #include<iostream>
  3. #include "matrici.h"
  4. using namespace std;
  5.  
  6. int main(){
  7.         int N,max1,max2;
  8.         int m[20][20];
  9.        
  10.         cout<<"Inserire il valore NxN : "<<endl;
  11.         cin>> N;
  12.        
  13.         prendimatrice(m,N);
  14.        
  15.         max1=maxdiagonaleprincipale(m,N);
  16.        
  17.         max2=maxdiagonalesecondaria(m,N);
  18.        
  19.         cout<<"Il massimo della diagonale principale e' "<<max1<<endl;
  20.         cout<<"Quello della diagonale secondaria e' "<<max2<<endl;
  21.        
  22.         minimotramax(max1,max2);
  23.        
  24.         }



Quando lancio il main l'errore è il seguente (per ogni funzione presente nel programma):

Codice sorgente - presumibilmente C/C++

  1. main.cpp:(.text+0x5b): undefined reference to `prendimatrice(int (*) [20], int)'



Non riesco a capire il perchè, ho seguito tutte le indicazione del professore, e il programma lanciato nel main va bene.



Ultima modifica effettuata da cos.peluso il 13/01/2018 alle 17:44
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6179
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 17:58
Sabato, 13/01/2018
matrici.cpp non e' incluso nella compilazione. Controlla la configurazione del tuo ambiente di sviluppo e assicurati che matrici.cpp venga incluso.


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote
Avatar
cos.peluso (Normal User)
Newbie


Messaggi: 18
Iscritto: 03/01/2018

Segnala al moderatore
Postato alle 18:02
Sabato, 13/01/2018
Testo quotato

Postato originariamente da pierotofy:

matrici.cpp non e' incluso nella compilazione. Controlla la configurazione del tuo ambiente di sviluppo e assicurati che matrici.cpp venga incluso.



Io uso Dev-C++ 5.11 , però onestamente non ho idea di come si controlli la configurazione del programma per fargli includere anche matrici.cpp .

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5640
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:07
Sabato, 13/01/2018
Crea un progetto e aggiungi al progetto tutti i file .cpp


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
Mikelius (Member)
Expert


Messaggi: 445
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 18:10
Sabato, 13/01/2018
Dovrei reinstallare l IDE per vedere la procedura esatta.
Ma in genere a sinistra (tua) dovrebbe esserci l'elenco dei file del progetto...
click col tasto destro su nome progetto e aggiungi i file che ti interessano.

Inoltre, credo che tu debba aggiungere le #include guard al tuo Header .

Ultima modifica effettuata da Mikelius il 13/01/2018 alle 18:15


"Io ne ho viste cose che voi umani non potreste immaginarvi...."
PM Quote
Avatar
cos.peluso (Normal User)
Newbie


Messaggi: 18
Iscritto: 03/01/2018

Segnala al moderatore
Postato alle 18:14
Sabato, 13/01/2018
Testo quotato

Postato originariamente da nessuno:

Crea un progetto e aggiungi al progetto tutti i file .cpp



Ok ho risolto così, grazie mille :)

PM Quote