PDA

View Full Version : [C++] strutture e funzioni


Mattiatn
04-05-2009, 10:21
ciao a tutti, come potrete ben capire dalla tipologia di linguaggi che scrivo, sono alle prime armi....
Dovendo scrivere un programma abbastanza complesso che richiama vari funzioni, volevo passare da semplici array bidimensionali alle strutture (altrimenti ad ogni modifica mi devo ricordare cosa c'è in una data colonna...).

un primo programma che riesco ad eseguire è il seguente:
#include <iostream>
#include <string>
#include <vector>
using namespace std;

//Dichiarazione della struttura generale
struct struttura{
string nome;
double valore;
};

void raddoppia(struttura* StrutturaModificata)
{
StrutturaModificata->nome="due";
StrutturaModificata->valore=2;
}

int main()
{
//Dichiarazioone della struttura
struttura numero1;

//Inizializzazione
numero1.nome = "uno";
numero1.valore = 1;

cout<<"nome del numero : "<<numero1.nome<<endl;
cout<<"valore del numero : "<<numero1.valore<<endl;

//Puntatore sulla struttura
struttura *PuntatoreNumero1 = &numero1;

//Richiamo della funzione
raddoppia(PuntatoreNumero1);
cout<<"scritte dopo funzioni"<<endl;
cout<<"nome del numero : "<<PuntatoreNumero1->nome<<endl;
cout<<"valore del numero : "<<PuntatoreNumero1->valore<<endl;


}


Il problema è che la funzione "raddoppia" volevo metterla in un file separato, ma in questo modo non mi riconosce il puntatore sulla struttura, o meglio la strutttura.
C'è modo di risolvere questo in qualche maniera?

Vi ringrazio anticipatamente!! :help: :help:

tomminno
04-05-2009, 12:14
Definisci struttura in un file "struttura.h" e lo includi nel file dove definisci raddoppia e nel main, un'alternativa è la forward declaration.
All'inizio dei file header usi la direttiva del preprocessore:

#pragma once

così eviti le doppie inclusioni

Mattiatn
04-05-2009, 12:17
ok, grazie mille!!!

scusami se approfitto della tua esperienza, ma poi la funzione la lascio uguale?

ed inoltre, se al suo interno volessi mettere degli array con numero di componenti che ricavo dal programma, è possibile?

Grazie ancora.