Как умножить вектор на матрицу из другого класса и заголовочный файл? - PullRequest
0 голосов
/ 01 мая 2019

Я хочу умножить вектор на матрицу (из другого класса и заголовочного файла) в классе Vector, перегрузив оператор *.

Класс векторов не распознает матрицу, и я даже использовал ключевое слово Friend.

это код конструктора:

Я получаю сообщение об ошибке в части ячейки и + = часть.

Конструктор

Matrix operator*(Matrix matrix, Vector vector)
{
    double sum_of_elements = 0;
    Matrix res(matrix.getnumrows, matrix.getnumcols);
    for (int i = 0; i <matrix.getnumcols(); i++)
    {
            for (int m = 0; m < vector.Index; m++) {
                res.cell[i] += matrix.cell[i][m] * vector.cell[i];
        }
    }
    return res;
}

Это заголовок для конструктора: Обратите внимание, что я использовал ключевое слово friend.

Заголовок

class Vector
{
    friend std::ostream &operator<<(std::ostream &out, const Vector &vec);
    friend Matrix operator*(Matrix matrix, Vector vector);
    private:
        int Index;
        std::vector<float> cell;
    public:
        Vector();
        Vector(float a, float b, float c);

    ~Vector();

};

Это исходный файл, в котором код должен выполнять свою задачу

Источник

try {

        Matrix m1(3, 3, 1.0);
        Matrix m2(3, 4, 1.0);

        m1(1, 2) = 14.92;
        m1(0, 0) = 4.2;
        Vector v1{9.1,1.2,8.2};
        Vector v2 = m1 * v1;
        std::cout << "v2:" << v2 << std::endl;;
    }
    catch (std::exception &e) {
        std::cout << "Exception: " << e.what() << "!" << std::endl;
    }
    catch (...) {
        std::cout << "Unknown exception caught!" << std::endl;
    }

Вывод должен выглядеть следующим образом:

v2:[47.62
132.644
18.5]

Но я получаю 6 сообщений об ошибках:

Error   C2248   'Matrix::cell': cannot access private member declared in class 'Matrix' vector.cpp  25  

Error   C2440   'initializing': cannot convert from 'Matrix' to 'Vector'    source.cpp  17  

Error   C2676   binary '+=': '_Ty' does not define this operator or a conversion to a type acceptable to the predefined operator   vector.cpp       25  

Error   C3867   'Matrix::getnumrows': non-standard syntax; use '&' to create a pointer to member    vector.cpp  21

Error   C3867   'Matrix::getnumcols': non-standard syntax; use '&' to create a pointer to member    vector.cpp  21

Error (active)  E0312   no suitable user-defined conversion from "Matrix" to "Vector" exists         Source.cpp     17
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...