Ciao a tutti,
ho appena cominciato a convertire un programma da FORTRAN a C++ (serve a fare i conti, sono un ingegnere chimico

). Ho cercato un pochettino in internet informazioni riguardo alle variabili globali, visto che il programma è pieno di COMMON condivisi tra le molte subroutine, ed ho realizzato che "namespace" è la esatta controparte C++ del COMMON. Ho quindi provato a utilizzarlo per condividere dei vettori e delle matrici tra due funzioni che utilizzano lo stesso namespace, ma ho un problema:
il vettore viene dimensionato nel main, ma tale dimensione varia ad ogni loop. La dichiarazione del vettore nel namespace però avviene senza dimensionamento, e sembra che dentro al main io non possa cambiare la dimensione. Scritto in codice:
*PREMESSA: uso delle librerie di calcolo numerico create da un mio professore. Nel seguente codice BzzVector è semplicemente una classe creata per gestire vettori. Scrivere BzzVector f0(int i) equivale a scrivere double f0[i], niente di che*
Codice:
namespace tsteep{
BzzVector f0;
}
void main(void){
using namespace tsteep;
for(i = 3; i <= 16; i++){
BzzVector f0(i);
}
}
La compilazione avviene senza errori ma l'exe dà errore: class BzzVector: index out of range, come se non potessi dire a f0, solo dichiarato fino a quel momento, di aumentare di dimensione. Riesco ad aggirare il problema semplicemente definendo nel main un altro vettore, e poi uguagliando f0 a questo vettore "ausiliario":
Codice:
namespace tsteep{
BzzVector f0;
}
void main(void){
using namespace tsteep;
for(i = 3; i <= 16; i++){
BzzVector aus(i);
f0 = aus;
}
}
allora sì che f0 ad ogni loop cambia ed aumenta di dimensione.
Il problema è che vorrei capire se si può andare a manipolare direttamente f0 senza dover dimensionare un vettore extra, per risparmiare memoria (che in questo caso è niente, ma nel programma principale che si trova a maneggiare più vettori di 5000 elementi penso inizi a pesare...).
Grazie!