0

私はTeuchos::RCP<Epetra_MultiVector> X1列だけで構成されており、このベクトルを単純なものに変換したいので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

Teuchos::RCPaを anEpetra_MultiVectorと anの間で変換するだけのEpetra_Vector場合は、追加の Teuchos 参照カウント ポインターを使用する必要はありません。コードで実行した の() 演算子を使用して、Epetra_Vectorから にEpetra_MultiVector直接アクセスできます。次のことができます。Epetra_MultiVector

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

(これは、ゼロインデックスを使用していることを前提としています。エラーの一部は、(*X)(0) ではなく (*X)(1) にアクセスしたことが原因である可能性があります)

(*X)(1) を使用してEpetra_Vectorポインターを取得しています。ここで追加で行ったのは、Epetra_Vectorオブジェクトを取得するために逆参照し、Epetra_Vectorコピー コンストラクターを使用してコピーを作成したことだけです。

これEpetra_Vectorはオリジナルとは独立していEpetra_MultiVectorます。

Teuchos::RCP必要に応じて、このポインターを使用してオブジェクトを作成し、そこから生のポインターを取得することもできます。Teuchos::RCPただし、これは一般的にドキュメントでは推奨されていませんが、次のように記載されています。

警告:: 生の C++ ポインタを公開しないでください!

于 2015-08-27T18:56:33.907 に答える