Не компилируется Qt-проект
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 16.08.22 07:45
Оценка:
Я создал в своё время проект на Visual Studio 2012 с использованием библиотеки MFC. У меня всё нормально компилировалось, запускалось и выполнялось.
Мне нужно стало перевести этот проект с библиотеки MFC на библиотеку Qt. Для этого я создал новый проект в Qt Creator 4.12.2 . Я перебросил туда .h-файлы и .cpp-файлы (не связанные диалогами MFC!) из этой первой программы.

В частности, у меня есть файлы 3dvecmat.h и 3dvecmat.cpp , где описан класс T3DMatrix для работы с матрицами размером 3x3 (поле a представляет собой массив long double[3][3] ). Вот некоторые его методы:

T3DMatrix::T3DMatrix()
{
    a[0][0] = a[0][1] = a[0][2] =
    a[1][0] = a[1][1] = a[1][2] =
    a[2][0] = a[2][1] = a[2][2] = 0.0;
}

T3DMatrix::T3DMatrix(T3DMatrix& m)
{
    a[0][0] = m.a[0][0];  a[0][1] = m.a[0][1];  a[0][2] = m.a[0][2];
    a[1][0] = m.a[1][0];  a[1][1] = m.a[1][1];  a[1][2] = m.a[1][2];
    a[2][0] = m.a[2][0];  a[2][1] = m.a[2][1];  a[2][2] = m.a[2][2];
}

T3DMatrix::T3DMatrix(long double a00, long double a01, long double a02, long double a10, long double a11, long double a 12,
                     long double a20, long double a21, long double a22)
{
    a[0][0] = a00;  a[0][1] = a01;  a[0][2] = a02;
    a[1][0] = a10;  a[1][1] = a11;  a[1][2] = a12;
    a[2][0] = a20;  a[2][1] = a21;  a[2][2] = a22;  
}

T3DMatrix& T3DMatrix::operator=(T3DMatrix m)
{
    a[0][0] = m.a[0][0];  a[0][1] = m.a[0][1];  a[0][2] = m.a[0][2];
    a[1][0] = m.a[1][0];  a[1][1] = m.a[1][1];  a[1][2] = m.a[1][2];
    a[2][0] = m.a[2][0];  a[2][1] = m.a[2][1];  a[2][2] = m.a[2][2];
    return *this;
}

T3DMatrix& T3DMatrix::operator+=(T3DMatrix m)
{
    a[0][0] += m.a[0][0];  a[0][1] += m.a[0][1];  a[0][2] += m.a[0][2];
    a[1][0] += m.a[1][0];  a[1][1] += m.a[1][1];  a[1][2] += m.a[1][2];
    a[2][0] += m.a[2][0];  a[2][1] += m.a[2][1];  a[2][2] += m.a[2][2];
    return *this;
}

T3DMatrix& T3DMatrix::operator-=(T3DMatrix m)
{
    a[0][0] -= m.a[0][0];  a[0][1] -= m.a[0][1];  a[0][2] -= m.a[0][2];
    a[1][0] -= m.a[1][0];  a[1][1] -= m.a[1][1];  a[1][2] -= m.a[1][2];
    a[2][0] -= m.a[2][0];  a[2][1] -= m.a[2][1];  a[2][2] -= m.a[2][2];
    return *this;

}

И при компиляции (сборке) проекта у меня появляются ошибки:

cannot bind non-const lvalue reference of type 'T3DMatrix&' to an rvalue 'T3DMatrix'


no matching constructor for initialization of 'T3DMatrix'


Ошибки эти появляются в следующих местах кода:

result += v->Var_f(jt,tj,r);


fg = m_EarthPerturb_var->Var_f(m_ff->m.JT,m_ff->m.TJ,m_ff->m.RVg);


F_v +=  m_GravMoonPerturb_Var->Var_f(jt,tj,r);


F_var -= m_ff->m_AtmEarth->m_Ro*E;


g = MT*dRT_dr[n]*L;


RM = R*m_M;


F_var += (RMT*dL_dl*RM);


Во всех этих случаях переменные result, fg, F_v, F_var, g, RM являются переменными типа T3DMatrix, определённые ранее. А правые части этих выражений возвращают переменную типа T3DMatrix.

В чём причина этих появляющихся ошибок при компиляции программы? Мне нужно что-то изменить в классе T3DMatrix?
Или же это "наведённые" ошибки--когда в классе T3DMatrix всё правильно, а настоящие ошибки надо искать в других местах моей программы?
1613 г. = 2024 г.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.