无法获得数组以保持课堂价值

时间:2016-08-19 14:55:15

标签: c++ arrays function class variables

当我使用对象函数set_and_make_variable时,我发送一个名称和值,它们都正常工作。然而,当我去使用show current_variables时,它的行为就像我从未为integersintegers_names设置值。我认为你可以修改与类相关的函数中的变量数组,而不需要引用或指针 我不正确吗?

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;
    }
}

1 个答案:

答案 0 :(得分:0)

operations_and_declerations()中,您按值发送了variables参数。因此,该函数创建了一个本地副本,并且只修改了该本地副本。

您可以通过引用发送参数来解决问题。只需将函数名称修改为: bool operations_and_declerations(string parsed_input[3000], variables & variable)