PDA

Visualizza la versione completa : C++ dichiarazione di una funzione


Sophos90
18-11-2011, 17:46
Ragazzi al corso di elementi di informatica ci hanno spiegato come usare le funzioni,ho provato ad applicarlo ma non ho capito perchè mi da errore su input(r,V,k); mi potreste dire come mai? e soprattutto come posso sistemare la cosa?
(per piacere non siate troppo brevi,non date per scontato che io sia un esperto xD)

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

using namespace std;

int main(int argc, char *argv[])
{
const int num_element=150;
int V[num_element],A[num_element];
int r,r2;
int k;
input(r,V,k);


system("PAUSE");
return 0;
}
void input(int& r,int U[],int &k){
int i;
cout<<"inserisci riempimento"<<endl;
cin>>r;
cout<<"inserisci valore k"<<endl;
cin>>k;
for(i=0;i<r;i++){
cout<<"inserisci valore numero"<<i+1<<endl;
cin>>U[i++];
}
}

MItaly
18-11-2011, 19:14
Se una funzione è definita dopo quella corrente devi scriverne prima il prototipo (ovvero la definizione della funzione privata del corpo) per consentire al compilatore di sapere da subito che parametri richiede, che tipo restituisce, eccetera.


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

using namespace std;

// prototipo della funzione
void input(int& r,int U[],int &k);

int main(int argc, char *argv[])
{
const int num_element=150;
int V[num_element],A[num_element];
int r,r2;
int k;
input(r,V,k);


system("PAUSE");
return 0;
}

void input(int& r,int U[],int &k)
{
int i;
cout<<"inserisci riempimento"<<endl;
cin>>r;
cout<<"inserisci valore k"<<endl;
cin>>k;
for(i=0; i<r; i++)
{
cout<<"inserisci valore numero"<<i+1<<endl;
cin>>U[i++];
}
}
in generale è buona norma scrivere tutti i prototipi delle funzioni definite del .cpp corrente in cima al file, dopo le inclusioni degli header, o, anche meglio, in un header separato che viene poi incluso (questo è utile se si ha un progetto con più file).

Sophos90
18-11-2011, 21:48
okok,ho risolto però mi da errore
invalid conversion from `int*' to `int' per quanto riguarda la funzione copia_array...cosa alquanto strana perchè è void.....

oregon
18-11-2011, 21:58
Originariamente inviato da Sophos90
okok,ho risolto però mi da errore
invalid conversion from `int*' to `int' per quanto riguarda la funzione copia_array...cosa alquanto strana perchè è void.....

E dove sarebbe questa funzione copia_array ?

Sophos90
18-11-2011, 22:09
scusa credevo di aver postato tutto il programma,cmq sta qui:
#include <iostream>
#include <stdlib.h>

using namespace std;
void input(int &r,int U[],int &k);
void copia_array(int r,const int V[],int k,int &r2,int A[]);
int min(int r,const int v[]);
void output_array( int r,const int V[]);




int main(int argc, char *argv[])
{
const int num_element=150;
int V[num_element],A[num_element];
int r,r2;
int k;


input(r,V,k);
copia_array (r,V,A,r2);
m1=min (r,V);
m2=min (r2,A);
output_array (r2,V);
output (m1,m2);


system("PAUSE");
return 0;
}
void input(int &r,int U[],int &k){
int i;
cout<<"inserisci riempimento"<<endl;
cin>>r;
cout<<"inserisci valore k"<<endl;
cin>>k;
for(i=0;i<r;i++){
cout<<"inserisci valore numero"<<i+1<<endl;
cin>>U[i++];
}
}
void copia_array(int r,const int V[],int k,int &r2,int A[]){
int i,j;
j=0;
for(i=0;i<r;i++){
if(V[i]>k){
A[j++]=V[i];
}
r2=j;
}

int min( int r,const int, v[]){
int i;
m=V[0];
for (i=0;i<r;i++){
if(V[i]<m){
m=V[i];
}
}
void output_array( int r,const int V[]){
for (i=0,i<r,i++){
cout<<V[i];
}
}

void output (int m1,int m2){
cout<<"il minimo del pirmo array e' "<<m1<<"il minimo del secondo array e'"<<m2<<endl;
}

oregon
18-11-2011, 22:11
Basta fare un po' di attenzione ...

La funzione è

void copia_array(int r,const int V[],int k,int &r2,int A[])

e tu la chiami

copia_array (r,V,A,r2);

in cui gli ultimi due parametri sono scambiati ...

Sophos90
18-11-2011, 22:13
ah quindi è una questione di ordineXD scusa e ke sono mancato alla spiegazione delle funzioni e non mi hanno detto questa cosaXD
Grazie!

oregon
18-11-2011, 22:15
Originariamente inviato da Sophos90
ah quindi è una questione di ordineXD

:dottò:

Sophos90
18-11-2011, 22:16
cmq continua a darmi lo stesso errore :confused:

oregon
18-11-2011, 22:21
I parametri della funzione sono 5

int r, const int V[], int k, int &r2, int A[]

nella chiamata non hai usato il terzo e hai invertito gli ultimi

Loading