Проблема в том, что код уже исправлен на не содержащий friend'ов. А функции - перегруженный оператор сдвига влево для вывода в поток и ещё одна, ну вообщем:
подключается статически
#ifndef DYNMATRIX_H
#define DYNMATRIX_H
#include <QtGlobal>
//! ===========================================================================
#ifdef D_SHARED_LIB
#define D_SHARED Q_DECL_EXPORT
#else
#define D_SHARED Q_DECL_IMPORT
#endif
//! ===========================================================================
#include <QTextStream>
#include <cmath>
//! ===========================================================================
class D_SHARED DynMatrix
{
public:
DynMatrix( int m, int n );/// конструктор( создаёт нулевую матрицу размерностью m x n )
DynMatrix( const DynMatrix& rhs );/// конструктор копирования
~DynMatrix();/// деструктор
//! ---------------------------------------------------------------------------
/** возвращает указаный элемент*/
float element( int i, int j )const{
return data
[j];
}
/** устанавливает указаный элемент в указаное значение*/
void setElement( int i, int j, float value ){
data[j] = value;
}
/** возвращает указаный элемент*/
float& operator()( int i, int j )const{
return data[j];
}
/** возвращает количество строк матрицы*/
unsigned m() const{
return m_;
}
/** устанавливает количество строк матрицы*/
void setM( unsigned value ){
m_ = value;
}
/** возвращает количество столбцов матрицы*/
unsigned n() const{
return n_;
}
/** устанавливает количество столбцов матрицы*/
void setN( unsigned value ){
n_ = value;
}
/** возвращает элементы матрицы в виде двумерного массива*/
float** elements() const{
return data;
}
//! ---------------------------------------------------------------------------
DynMatrix& operator+=( const DynMatrix& rhs );/// возвращает ссылку на матрицу, увеличеной на другую
DynMatrix& operator-=( const DynMatrix& rhs );/// возвращает ссылку на матрицу, уменьшеную на другую
DynMatrix& operator*=( const float rhs );/// возвращает ссылку на матрицу, домноженой на число
DynMatrix& operator/=( const float rhs );/// возвращает ссылку на матрицу, доделёную на число
//! ---------------------------------------------------------------------------
DynMatrix operator+( const DynMatrix& rhs )const;/// складывает две матрицы
DynMatrix operator-( const DynMatrix& rhs )const;/// вычитает одну матрицу из другой
DynMatrix operator*( const DynMatrix& rhs )const;/// возвращает матрицу, умноженую на другую
DynMatrix operator*( const float rhs )const;/// возвращает матрицу умноженную на число
friend DynMatrix operator*( const float lhs, const DynMatrix rhs );/// возвращает матрицу умноженную на число( число - левый операнд )
DynMatrix operator/( const float rhs )const;/// возвращает матрицу делённую на число
//! ---------------------------------------------------------------------------
DynMatrix& operator=( const DynMatrix& rhs );/// оператор присвоения
//! ---------------------------------------------------------------------------
DynMatrix operator!() const;/// возвращает транспонированую матрицу
DynMatrix preMinor( unsigned row, unsigned col )const;/// возвращает указаный минор
float determinant() const;/// возвращает определитель
DynMatrix inverse() const;/// возвращает обратную матрицу
DynMatrix toTriangle();/// возвращает соответствующую треугольную матрицу
/*friend */void toTriangle(/* DynMatrix& A,*/ DynMatrix& B );
//! ---------------------------------------------------------------------------
/*friend */QTextStream& operator<<( QTextStream& os/*, DynMatrix& m*/ );/// выводит матрицу в поток вывода Qt
private:
unsigned m_, n_;/// число строк и столбцов
float** data;/// массив, содержащий элементы матрицы
};
//! ===========================================================================
#endif // DYNMATRIX_H
Две последнии функции..
Их описание:
//! ===========================================================================
//! [19]
void DynMatrix ::toTriangle(/*DynMatrix& A,*/ DynMatrix& B )
{
//if( m != n )break;
/*DynMatrix result( m, n );
result = *this;*/
for( unsigned i = 0; i < n_ - 1; ++i )
{
for( unsigned j = i; j < n_ - 1; ++j )
{
float c = data;
float c_1 = data[j + 1];
for( unsigned k = i; k < n_; ++k )
{
data[k] /= c;
data[k] *= c_1;
data[j + 1][k] -= data[k];
}
B.data B.data B.data[j + 1][0] -= B.data }
}
}
//! [19]
//! ===========================================================================
//! [20]
QTextStream& DynMatrix ::operator<<( QTextStream& os/*, DynMatrix& m*/ )
{
for( unsigned i = 0; i < m_; ++i )
{
for( unsigned j = 0; j < n_; ++j )
{
os << data[j] << " ";
}
os << endl;
}
return os;
}
//! [20]
//! ===========================================================================