动态分配 mpfr_t 矩阵 std::vector
Dynamically Allocated mpfr_t matrix with std::vector
我想要一个 class 作为 mpfr_t 元素的矩阵。我认为 STL Vectors 是一个好主意,可以根据需要动态分配其中的任意数量,但我在这里遇到了一些错误。
#ifndef GMPMATRIX_H
#define GMPMATRIX_H
#include <vector>
#include <mpfr.h>
typedef std::vector<mpfr_t> mpVector;
typedef std::vector<mpVector> mpMatrix;
class GmpMatrix
{
private:
int n;
int m;
mpMatrix elements;
public:
GmpMatrix() {}
GmpMatrix(int n, int m)
{
this->n = n;
this->m = m;
for (int i = 0; i < n; ++i)
{
mpVector e_push(m);
for (int j = 0; j < m; ++j)
{
mpfr_t e;
mpfr_init(e);
e_push.push_back(e);
}
}
}
~GmpMatrix() {}
};
#endif // GMPMATRIX_H
错误是:
/usr/include/c++/5/ext/new_allocator.h:120:4: error: parenthesized initializer in array new [-fpermissive]
{ ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
^
/usr/include/c++/5/ext/new_allocator.h:120:4: error: no matching function for call to ‘__mpfr_struct::__mpfr_struct(const __mpfr_struct [1])’
我真的调查过了,但我想不通。有没有办法让 vector< vector<mpfr_t> >
工作?有谁知道发生了什么事吗?
mpfr_t
是 C 风格的数组类型。您不能将它们存储在 std::vector
.
中
您可以将 mpfr_t
包装在一个简单的 struct
中并存储它们。
我想要一个 class 作为 mpfr_t 元素的矩阵。我认为 STL Vectors 是一个好主意,可以根据需要动态分配其中的任意数量,但我在这里遇到了一些错误。
#ifndef GMPMATRIX_H
#define GMPMATRIX_H
#include <vector>
#include <mpfr.h>
typedef std::vector<mpfr_t> mpVector;
typedef std::vector<mpVector> mpMatrix;
class GmpMatrix
{
private:
int n;
int m;
mpMatrix elements;
public:
GmpMatrix() {}
GmpMatrix(int n, int m)
{
this->n = n;
this->m = m;
for (int i = 0; i < n; ++i)
{
mpVector e_push(m);
for (int j = 0; j < m; ++j)
{
mpfr_t e;
mpfr_init(e);
e_push.push_back(e);
}
}
}
~GmpMatrix() {}
};
#endif // GMPMATRIX_H
错误是:
/usr/include/c++/5/ext/new_allocator.h:120:4: error: parenthesized initializer in array new [-fpermissive]
{ ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
^
/usr/include/c++/5/ext/new_allocator.h:120:4: error: no matching function for call to ‘__mpfr_struct::__mpfr_struct(const __mpfr_struct [1])’
我真的调查过了,但我想不通。有没有办法让 vector< vector<mpfr_t> >
工作?有谁知道发生了什么事吗?
mpfr_t
是 C 风格的数组类型。您不能将它们存储在 std::vector
.
您可以将 mpfr_t
包装在一个简单的 struct
中并存储它们。