RCP<Epetra_MultiVector> для преобразования Epetra_Vector (Трилинос)

У меня есть Teuchos::RCP<Epetra_MultiVector> X сделано только из 1 столбца, и я хочу преобразовать этот вектор в простой 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.

Что я делаю неправильно?

1 ответ

Если все, что вы хотите сделать, это конвертировать между Teuchos::RCP для Epetra_MultiVector и Epetra_VectorВам не нужно использовать какие-либо дополнительные указатели подсчета ссылок Teuchos. Вы можете получить доступ к Epetra_Vector из Epetra_MultiVector непосредственно используя оператор () Epetra_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++!

Другие вопросы по тегам