2016-08-19 2 views
0

Wenn ich die Objektfunktion set_and_make_variable verwende, sende ich ihm einen Namen und einen Wert, die beide korrekt funktionieren. Aber dann, wenn ich gehe zu zeigen current_variables es verhält sich wie ich nie die Werte für beide integers und integers_names. Ich dachte, Sie könnten die Variablenarrays von den Funktionen, die der Klasse zugeordnet sind, ohne Referenzen oder Zeiger ändern.
Bin ich nicht richtig?Kann Arrays nicht erhalten, um Wert in Klasse zu halten

void reset_name(string *variable_names) 
{ 
    for (int i = 0; i < 100; i++) 
    { 
     variable_names[i] = ""; 
    } 
} 
void reset_int_value(int *variable_value) 
{ 
    for (int i = 0; i < 100; i++) 
    { 
     variable_value[i] = 0; 
    } 
} 
int find_next(string variable_names[100]) 
{ 
    for (int i = 0; i < 100; i++) 
    { 
     if (variable_names[i] == "") 
     { 
      return i; 
     } 
    } 
} 


//***************************************************************** 
class variables_integers 
{ 
public: 
    string integer_names[100]; 
    int integers[100]; 

    variables_integers(void); 
    void set_and_make_variable(string, int); 
    void show_current_variables(void); 

}; 

variables_integers::variables_integers(void) 
{ 
    reset_int_value(integers); 
    reset_name(integer_names); 
} 

void variables_integers::show_current_variables(void) 
{ 
    cout << "INTEGERS:" << endl; 

    for (int i = 0; i < (find_next(integer_names)); i++) 
    { 
     cout << integer_names[i] << " = " << integers[i] << endl; 
    } 
} 

void variables_integers::set_and_make_variable(string name, int value) 
{ 
    cout << name << " " << value << endl; 
    cout << find_next(integer_names) << endl; 
    integers[find_next(integer_names)] = value; 
    integer_names[find_next(integer_names)] = name; 
} 


//*** added code ****** 
bool operations_and_declerations(string parsed_input[3000], variables variable) 
{ 
    if (parsed_input[0] == "int") 
    { 
     if (parsed_input[2] == "=") 
     { 
      variable.integers.set_and_make_variable(parsed_input[1], atoi(parsed_input[3].c_str())); 
     } 
     return true; 
    } 
    else if (parsed_input[0] == "string") 
    { 
     return true; 
    } 
    //else if (parsed_input[0] ==) 
    else 
    { 
     return false; 
    } 
} 
+5

Ich sehe keine Fehler, die herausspringen. Bitte poste ein [mcve]. –

+0

Welches ist der Code, den Sie verwenden, um die Member-Funktionen der Klasse aufzurufen? Vielleicht liegt das Problem dort –

+0

haben Sie versucht, mit Debugger über diesen Code zu gehen? – mvidelgauz

Antwort

0

In operations_and_declerations() senden Sie Ihre variables Parameter nach Wert. Daher hat die Funktion eine lokale Kopie erstellt und nur diese lokale Kopie geändert.

Sie können das Problem beheben, indem Sie den Parameter per Referenz senden. Ändern Sie einfach den Funktionsnamen zu: bool operations_and_declerations(string parsed_input[3000], variables & variable)

+0

Vielen Dank! Ich dachte, ich hätte das getan. Manchmal braucht es nur ein frisches Augenpaar. –

Verwandte Themen