PDA

Visualizza la versione completa : [C++] variabili statiche in due classi


warcomeb
21-01-2009, 15:46
salve a tutti, dopo poche ore che abbandono un problema me se ne ripresenta uno nuovo...
allora:

in una classe ho una variabile statica. per qualche motivo assurdo mi trovo(anche se la variabile è statica) a doverla passare come argomento in alcune funzioni. comunque fino ad adesso ha sempre funzionato. ora mi sono trovato davanti alla necessita di doverla passare(è un puntatore la variabile statica) ad un costruttore di una classe all'interno della quale non ho definito il membro a cui l'associo statico. facendo in questo modo il tutto non funziona, ma se definisco il puntatore statico all'interno della classe e la istanzio anche nel cpp e poi nella costruzione dell'oggetto gli assegno l'altro puntatore statico il tutto funziona!!!! :oVVoVe: ma perchè???
ho fatto qualche stranezza?? :confused: mmmm help me!!

grazie


Marco

MItaly
21-01-2009, 15:56
Non si capisce molto bene quello che hai scritto, in particolare

all'interno della quale non ho definito il membro a cui l'associo statico. Forse è meglio se riformuli la domanda (indicando magari cosa intendi per "non funziona") e soprattutto posti il codice incriminato.

warcomeb
21-01-2009, 16:27
perdonami... hai ragione non sono stato molto chiaro!!
allora la mia prima classe è questa:


class ps_configure_module {

public:

static sc_core::sc_trace_file *tf;

// The constructor of the class
ps_configure_module(string);

// The distructor of the class
~ps_configure_module();

ouble> parameter;
};

nel file cpp ho inserito questo:

sc_core::sc_trace_file * ps_configure_module::tf= sc_core::sc_create_vcd_trace_file("energy");

ora ho la necessità all'interno del costruttore della classe di creare un altro oggetto della seguente classe:


class ps_for_all_parsing {
public:

std::map<string, ps_for_all_parsing>::iterator map_for_all_parsing_iterator;

// utility
string operator_type_for_all;
string data_type_for_all;
int model_for_all;
vector<double> parameter_for_all;
sc_core::sc_trace_file *tf_for_all;

// constructor
ps_for_all_parsing(string operator_type, string data_type, int model, vector<double> parameter, sc_core::sc_trace_file * tf){

operator_type_for_all = operator_type;
data_type_for_all = data_type;
model_for_all = model;
parameter_for_all = parameter;
*tf_for_all = *tf;

}

// distructor
~ps_for_all_parsing(){};

};

in questo modo:


tmp_string2 = ( data_type + " " + operator_type);
std::pair<string,ps_for_all_parsing> tmppairfa(tmp_string2, ps_for_all_parsing(operator_type, data_type, model, parameter, tf));
ps_power_module::get_for_all_table().insert(tmppai rfa);


dove tf è il puntatore statico della prima classe!
ora in questo modo in esecuzione da errore dicendo segmentation fault! se invece metto static il membro tf_for_all della seconda classe il tutto funziona... perchè?!?!?!?!!?

grazie

Marco

warcomeb
21-01-2009, 18:15
nessuno mi da una mano... ???? :cry:

grazie

Marco

shodan
21-01-2009, 19:14
*tf_for_all = *tf;

Sicuro sia questa la sintassi per assegnare un puntatore?

warcomeb
22-01-2009, 00:49
hai ragione... così assegno i contenuti degli indirizzi puntati e non i puntatori! :jam:

la versione giusta è questa vero??

tf_for_all = tf;

grazie


Marco

Loading