RCP & л; Epetra_MultiVector & GT; конвертация в 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.

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

0

Решение

Если все, что вы хотите сделать, это конвертировать между 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 ++!

0

Другие решения


По вопросам рекламы [email protected]