我试图在MPI中初始化Armadillo稀疏matriix sp_mat,如下所示:
if(rank==0)
{ // some code for locations, values
sp_mat X(locations,values)
}
// this is where I want to use X
if(rank==0)
some_fun(X)
如您所见,Armadillo构造函数是if block
的本地构造函数,因此在if block
之后无法使用它。
用另一种方式提出同样的问题:
extern sp_mat X
if(rank==0)
{ // some code for locations, values
sp_mat X(locations,values)
}
// this is where I want to use X
if(rank==0)
some_fun(X)
在extern sp_mat X
之前使用if block
也无济于事(我收到了未定义的引用错误)
如何初始化X并在之后重复使用?
答案 0 :(得分:1)
使用(智能)指针:
std::unique_ptr<sp_mat> X; // or std::shared_ptr<sp_mat> or sp_mat*
if (rank == 0) {
// some code for locations and values
X = std::unique_ptr<sp_mat>(new sp_mat(locations, values));
}
...
if (rank == 0)
some_fun(*X);
答案 1 :(得分:1)
不是使用指针技巧,而是可以使用来自C ++ 11的更清晰的std::move()
:
sp_mat X;
if(rank==0)
{ // some code for locations, values
X = std::move( sp_mat(locations,values) );
}