Доступ к массиву stati c в пространстве имен, возвращающем ноль - PullRequest
0 голосов
/ 24 апреля 2020

Как видно из приведенного ниже кода, у меня есть пространство имен с парой функций stati c и массивом stati c 2D float. Моя проблема с возвращаемым значением второй функции: она возвращает 0, когда она должна возвращать 1.16 (значение «коэффициенты»).

Я прошел, и у «коэффициентов» всегда есть правильные значения, даже в автоматическом режиме значение для коэффициентов [один * 2] [два] является правильным. Нет ошибок при чтении из файла. Оба материала, которые я передаю, - 6 (резина), поэтому они не выходят за пределы массива.

Пожалуйста, помогите! Это и я, и приятель оба в тупик. (PS: извините за странный отступ)

enum Material
{
    ICE = 0, 
    GLASS = 1, 
    CONCRETE = 2, 
    WOOD = 3,
    METAL = 4,
    SMOOTH_METAL = 5, 
    RUBBER = 6
};


 namespace Materials
    {
    static float coefficients[14][7];

    static void ReadFrictionCoefficientsFromFile()
    {
        std::ifstream file("FrictionCoefficients.csv");



if (!file.is_open())
    {
        std::cout << "ERROR: cannot open file FrictionCoefficients.csv" << std::endl;
        return;
    }

    std::string line;
    float val;
    int row = 0;
    while (std::getline(file, line))
    {
        std::stringstream ss(line);
        int col = 0;
        while (ss >> val)
        {
            coefficients[col][row] = val;
            if (ss.peek() == ',') ss.ignore();
            col++;
        }
        row++;
    }
    file.close();
    }


    static float GetCombinedStaticFriction(const Material m1, const Material m2)
    {
        int one = (int)m1, two = (int)m2;
        if (one > two)
        {
            one = (int)m2;
            two = (int)m1;
        }
        return coefficients[one * 2][two]; // -- ISSUE -- //
    }
}

Редактировать: добавлены строки, которые вызывают соответствующие функции

Materials::ReadFrictionCoefficientsFromFile();
friction_static = Materials::GetCombinedStaticFriction(body1->rigidbody.material, body2->rigidbody.material);
...