Форум программистов, компьютерный форум CyberForum.ru

Неверный возврат из функции - C++

Восстановить пароль Регистрация
 
knjazshugai
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 5
08.12.2013, 21:42     Неверный возврат из функции #1
Краткий экскурс. Есть универсальный класс Matrix<TYPE>, описание его выглядит вот так:

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*Matrix.h*/
#ifndef _MATRIX_CLASS
#define _MATRIX_CLASS
#include <iostream>
 
template <class TYPE>
class Matrix
{
protected:
    unsigned m_nRows, m_nColumns;
    TYPE** m_Matrix;
 
    unsigned FirstNNinColumn (unsigned, unsigned);
 
public:
    Matrix(unsigned, unsigned);
    ~Matrix(void);
 
    void SpecialSteppedForm(void);
 
    void ExchangeRows(unsigned, unsigned);
    void SumRows(TYPE, unsigned, unsigned);
    void MultipleRow(TYPE, unsigned);
    void SetElement(TYPE, unsigned, unsigned);
    TYPE GetElement(unsigned, unsigned);
 
    Matrix operator+ (Matrix&);
    Matrix operator- (Matrix&);
    Matrix operator* (Matrix&);
    Matrix operator= (Matrix&);
 
    template<class TYPE>
    friend std::ostream& operator<<(std::ostream&, Matrix<TYPE>&);
    template<class TYPE>
    friend std::istream& operator>>(std::istream&, Matrix<TYPE>&);
};
 
#include "Matrix.cpp"
#endif /*ifndef _MATRIX_CLASS*/


проблема возникает с функцией умножения матриц. Она реализована операторной функцией членом в "matrix.cpp" вот так:

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
template<class TYPE>
Matrix<TYPE> Matrix<TYPE>::operator* (Matrix<TYPE>& Factor)
{
    if (m_nColumns != Factor.m_nRows)
        throw IncorrectMultiplicationException();
    Matrix<TYPE> Result(m_nRows, Factor.m_nColumns);
    for (unsigned i = 0, j = 0; ; j++)
    {
        if (j == Result.m_nColumns)
        {
            if (++i == Result.m_nRows)
                break;
            j = 0;
        }
        TYPE Temp(0);
        for (unsigned k = 0; k < m_nColumns; k++)
            Temp += m_Matrix[i][k]*Factor.m_Matrix[k][j];
        Result.m_Matrix[i][j] = Temp;
    }
    return Result;
}


В чем проблема, собственно... Возвращается объект класса... Верно возвращаются поля unsigned m_nRows, m_nColumns, а поле TYPE** m_Matrix теряется при использовании в качестве параметра шаблона собственный класс.
Как этот код можно исправить, потому что идей даже примерно нет. Во время построчного дебага видно, что считается произведение верно, а вот возвращается совсем нет. Теряется сам указатель m_Matrixю
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2013, 21:42     Неверный возврат из функции
Посмотрите здесь:

Возврат структуры из функции C++
C++ Возврат массива из функции
Возврат 2 значений из функции с одним вызовом этой же функции C++
Возврат значения функции C++
Возврат boost::any из функции C++
C++ Возврат массива из функции
C++ Неверный выход значения из функции
C++ Возврат массива из функции

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.12.2013, 21:45     Неверный возврат из функции #2
Конструктор копирования нужен.
knjazshugai
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 5
08.12.2013, 22:08  [ТС]     Неверный возврат из функции #3
Спасибо большое)
Yandex
Объявления
08.12.2013, 22:08     Неверный возврат из функции
Ответ Создать тему
Опции темы

Текущее время: 02:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru