2015-02-11 44 views
0

我具有由只有1列, 的Teuchos::RCP<Epetra_MultiVector> X,我想這個矢量轉換成一個簡單Epetra_Vector. 我使用了以下功能:RCP <Epetra_MultiVector>到Epetra_Vector轉換(Trilinos)

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

    Epetra_Vector* x = x_rcp.getRawPtr(); 

我可以編譯這些功能,但是當我嘗試打印出兩個 x_rcpx我沒有得到任何結果(不將文件寫入),代碼將停止 錯誤:

terminate called after throwing an instance of 'int'.

我在做什麼錯?

回答

0

如果您只想在Teuchos::RCPEpetra_MultiVectorEpetra_Vector之間進行轉換,則不需要使用任何額外的Teuchos引用計數指針。您可以直接使用您在代碼中完成的() operatorEpetra_MultiVectorEpetra_MultiVector訪問Epetra_Vector。你可以做到以下幾點:

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文檔中通常是不鼓勵的,但是,其中指出:

WARNING:: Avoid exposing raw C++ pointers!

相關問題