Dear C++ users,
I am using the transpose function in a header file from the Scythe library, named la.h, to transpose a matrix. Here is what is in the la.h:
Code:
001#ifndef SCYTHE_LA_H
002#define SCYTHE_LA_H
003
004#include "matrix.h"
005#include "algorithm.h"
006#include "error.h"
007#ifdef SCYTHE_LAPACK
008#include "lapack.h"
009#endif
010
011
012#include <numeric>
013#include <algorithm>
014#include <set>
015
016namespace scythe {
017
018 namespace {
019 typedef unsigned int uint;
020 }
021
022 /* Matrix transposition */
023
024 /*!\brief Transpose a Matrix.
025 *
026 * This function transposes \a M, returning a Matrix \a R where each
027 * element of \a M, \f$M_ij\f$ is placed in position \f$R_ji\f$.
028 * Naturally, the returned Matrix has M.cols() rows and M.rows()
029 * columns.
030 *
031 * \param M The Matrix to transpose.
032 *
033 * \throw scythe_alloc_error (Level 1)
034 *
035 */
036 template <matrix_order RO,typename T,
037 matrix_order PO>
038 Matrix<T, RO, Concrete>
039 t (const Matrix<T,PO,Concrete>& M)
040 {
041 uint rows = M.rows();
042 uint cols = M.cols();
043 Matrix<T,RO,Concrete> ret(cols, rows, false);
044 if (PO == Col)
045 copy<Col,Row>(M, ret);
046 else
047 copy<Row,Col>(M, ret);
048
049 SCYTHE_VIEW_RETURN(T, RO, Concrete, ret)
050 }
051 template <typename T, matrix_order O, matrix_style S>
052 Matrix<T, O, Concrete>
053 t (const Matrix<T,O,S>& M)
054 {
055 return t<T,O,Concrete>(M);
056 }
057} // end namespace scythe
058
059#endif /* SCYTHE_LA_H */
Here is my main.cpp:
Code:
000#include <iostream>
001#include "la.h"
002#include "lapack.h"
003#include "matrix.h"
004using namespace scythe;
005using namespace std;
006int main()
007{
008 int val2[9]={2,2,2,2,2,2,2,2};
009 const Matrix<int, Col, Concrete> SS(2,4,val2);
010 Matrix<> MM = t(SS);
011}
And the error message I got is:
la.h||In function `scythe::Matrix<T_type, ORDER, Concrete> scythe::t(const scythe::Matrix<T, O, S>&) [with T = int, scythe::matrix_order O = Col, scythe::matrix_style S = Concrete]':|
main.cpp|11|instantiated from here|
la.h|55|error: cannot convert `scythe::matrix_style' to `scythe::matrix_order' in initialization|
la.h|55|error: non-constant `<expression error>' cannot be used as template argument|
Can anyone help to figure out what is wrong here?
Thank you!