0

Teuchos::RCP<Epetra_MultiVector> X只有一列,我想把这个向量转换成一个简单的向量,Epetra_Vector. 我使用了以下函数:

  const Teuchos::RCP<Epetra_Vector> x_rcp =
    Teuchos::rcpWithEmbeddedObj( (*X)(1), X, false );

  Epetra_Vector* x = x_rcp.getRawPtr();

我可以编译这些函数,但是当我尝试打印这两个函数 x_rcp并且x我没有得到任何结果(文件未写入)时,代码停止并出现错误:

在抛出一个“int”实例后调用终止。

我究竟做错了什么?

4

1 回答 1

0

如果您只想在 aTeuchos::RCP到 anEpetra_MultiVector和 an之间进行转换Epetra_Vector,则不需要使用任何额外的 Teuchos 引用计数指针。您可以使用您在代码中完成的() 运算符直接从Epetra_Vectora访问。您可以执行以下操作:Epetra_MultiVectorEpetra_MultiVector

Epetra_Vector* x = new Epetra_Vector(*((*X)(0)));

(这是假设您使用的是零索引;您的错误可能部分是您访问了 (*X)(1) 而不是 (*X)(0))

您已经在使用 (*X)(1) 来获取Epetra_Vector指针;我在这里所做的所有额外操作都是取消引用以获取Epetra_Vector对象,并使用Epetra_Vector复制构造函数进行复制。

Epetra_Vector将独立于原来的Epetra_MultiVector.

如果您愿意,您还可以Teuchos::RCP使用此指针创建一个对象,然后从中获取原始指针。但是,在文档中通常不鼓励这样做Teuchos::RCP,其中指出:

警告:: 避免暴露原始 C++ 指针!

于 2015-08-27T18:56:33.907 回答