Ciao, hai sbagliato un po di cosucce
se una funzione è dichiarata con "int":
int funzione (...)
{
}
allora dovrà restituire (con "return") qualcosa altrimenti metti "void" al posto di int
nella funzione print_array
per restituire più di due valori non si può fare come hai fatto tu perchè return fa terminare la
funzione e ritorna il valore quindi ritornava solo il valore del primo return e mai quello del secondo
per ritornare due o più valori si possono usare i puntatori:
void ritorna_due_oggetti(int *ogg1, int *ogg2)
{
*ogg1 = 3;
*ogg2 = *ogg1 + 2;
}
//e si richiamerà così nel main:
int ogg1, ogg2;
ritorna_due_oggetti(&ogg1, &ogg2);
printf("%d,%d\n",ogg1, ogg2);
il "brutto" è che devi mettere davanti sempre l'asterisco...
c'è un secondo modo ovvero con gli alias (come se dai un altro nome alla tua variabile,
non ne crei una nuova è sempre la stessa):
void ritorna_Due_Valori(int &ogg1, int &ogg2)
{
ogg1 = 3;
ogg2 = ogg1 + 2;
}
//e si richiamerà così nel main:
int ogg1, ogg2;
ritorna_due_oggetti(ogg1, ogg2);
printf("%d,%d\n",ogg1, ogg2);
NB: gli & per ritornare l'indirizzo della variabile sono diversi dagli & per creare gli alias,
i primi si usano sulle variabili, i secondi soltanto quando si creano le variabili, per indicare che quello è un alias (sinonimo) di un altra variabile.
se vuoi ritornare i vettori e i puntatori non serve usare gli alias ovviamente
#include <stdio.h>
#include <iostream>
using namespace std;
void print_array(int a[], int dim);
void _array(int a[], int dim, int &neg, int &pos);
int main()
{
int a[4]={-98,4,-5,6};
int neg;
int pos;
print_array(a,4);
printf("\n");
_array(a,4, neg, pos);
printf("%d\n %d\n", neg, pos);
system("PAUSE");
return 0;
}
void print_array(int a[], int dim)
{
int i;
for(i=0;i<dim;i++)
{
printf("%d\n", a[i]);
}
}
void _array(int a[], int dim, int &neg, int &pos)
{
int i;
neg=0;
pos=0;
for(i=0;i<dim;i++)
{
if(a[i]<0)
{
neg=neg+a[i];
}
else
{
pos=pos+a[i];
}
}
}