# About casting from vtkImageData\* to vtkDataObject\*

**URL:** https://discourse.vtk.org/t/about-casting-from-vtkimagedata-to-vtkdataobject/10014
**Category:** Support
**Tags:** code
**Created:** [November 30, 2022, 3:46am UTC](https://discourse.vtk.org/t/about-casting-from-vtkimagedata-to-vtkdataobject/10014 "2022-11-30T03:46:53Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![Sterben\_01](https://discourse.vtk.org/user_avatar/discourse.vtk.org/sterben_01/32/6142_2.png) [@Sterben\_01](https://discourse.vtk.org/u/Sterben_01)
#### Post date: [November 30, 2022, 3:46am UTC](https://discourse.vtk.org/t/about-casting-from-vtkimagedata-to-vtkdataobject/10014/1 "2022-11-30T03:46:53Z")

</div>

Hi.  
I’m trying to write an simple example of vtk. I want to read nii file and directly write it to another file.  
My code:

```auto
vtkSmartPointer < vtkNIFTIImageReader > NiftReader = vtkSmartPointer < vtkNIFTIImageReader > ::New();
NiftReader->SetFileName ( argv[1] ) ;
NiftReader->Update() ;
vtkSmartPointer < vtkNIFTIImageWriter > Niftwriter = vtkSmartPointer < vtkNIFTIImageWriter > ::New();
Niftwriter->SetFileName ( argv[2] );
Niftwriter->AddInputData(NiftReader->GetOutput()) ;
Niftwriter->Write();

```

I don’t know why it always shows no known conversion between those types.  
Function `GetOutput()` will return an `vtkImageData*`  
Function `AddInputData `can accept an`vtkDataObject*`  
Also, class `vtkImageData ` is inherited from `vtkDataObject`  
In addition, I can’t even use `dynamic_cast ` like this `auto ptr = dynamic_cast<vtkDataObject*> (NiftReader->GetOutput())`

I don’t know why.

---

<div class="post-metadata">

### Author: ![mwestphal](https://discourse.vtk.org/user_avatar/discourse.vtk.org/mwestphal/32/19_2.png) [@mwestphal](https://discourse.vtk.org/u/mwestphal)
#### Post date: [November 30, 2022, 7:32am UTC](https://discourse.vtk.org/t/about-casting-from-vtkimagedata-to-vtkdataobject/10014/2 "2022-11-30T07:32:34Z")

</div>

Hi @Sterben_01 ,

Should work out of the box without conversion. What is the error ?

Best,

---

<div class="post-metadata">

### Author: ![Sterben\_01](https://discourse.vtk.org/user_avatar/discourse.vtk.org/sterben_01/32/6142_2.png) [@Sterben\_01](https://discourse.vtk.org/u/Sterben_01)
#### Post date: [November 30, 2022, 8:06am UTC](https://discourse.vtk.org/t/about-casting-from-vtkimagedata-to-vtkdataobject/10014/3 "2022-11-30T08:06:39Z")

</div>

It is something like this:

```nohighlight
In function ‘int main(int, char**)’:
error: no matching function for call to ‘vtkNIFTIImageWriter::AddInputData(vtkImageData*)’
   52 | NiftWriter->AddInputData (NiftReader->GetOutput()) ;
      | ^
In file included from /usr/include/vtk-6.3/vtkImageReader2.h:42,
                 from /usr/include/vtk-6.3/vtkNIFTIImageReader.h:36,
                 from /home/zhaoz22/Desktop/FINAL/src/Butterworth.cxx:2:
/usr/include/vtk-6.3/vtkImageAlgorithm.h:73:16: note: candidate: ‘virtual void vtkImageAlgorithm::AddInputData(vtkDataObject*)’
   73 | virtual void AddInputData(vtkDataObject *);
      | ^ ~~~~~~~~~~~
/usr/include/vtk-6.3/vtkImageAlgorithm.h:73:29: note: no known conversion for argument 1 from ‘vtkImageData*’ to ‘vtkDataObject*’
   73 | virtual void AddInputData(vtkDataObject *);
      | ^ ~~~~~~~~~~~~~~
/usr/include/vtk-6.3/vtkImageAlgorithm.h:74:16: note: candidate: ‘virtual void vtkImageAlgorithm::AddInputData(int, vtkDataObject*)’
   74 | virtual void AddInputData(int, vtkDataObject*);
      | ^ ~~~~~~~~~~~
/usr/include/vtk-6.3/vtkImageAlgorithm.h:74:16: note: candidate expects 2 arguments, 1 provided
make[2]: *** [CMakeFiles/Butterworth.dir/build.make:63: CMakeFiles/Butterworth.dir/Butterworth.cxx.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:76: CMakeFiles/Butterworth.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

```

---

<div class="post-metadata">

### Author: ![mwestphal](https://discourse.vtk.org/user_avatar/discourse.vtk.org/mwestphal/32/19_2.png) [@mwestphal](https://discourse.vtk.org/u/mwestphal)
#### Post date: [November 30, 2022, 8:16am UTC](https://discourse.vtk.org/t/about-casting-from-vtkimagedata-to-vtkdataobject/10014/4 "2022-11-30T08:16:36Z")

</div>

> [@Sterben\_01](#):
>
> ```auto
> vtkSmartPointer < vtkNIFTIImageReader > NiftReader = vtkSmartPointer < vtkNIFTIImageReader > ::New();
> NiftReader->SetFileName ( argv[1] ) ;
> NiftReader->Update() ;
> vtkSmartPointer < vtkNIFTIImageWriter > Niftwriter = vtkSmartPointer < vtkNIFTIImageWriter > ::New();
> Niftwriter->SetFileName ( argv[2] );
> Niftwriter->SetnputData(NiftReader->GetOutput()) ;
> Niftwriter->Write();
> 
> ```

`SetInputData` instead of `AddInputData`.

---

<div class="post-metadata">

### Author: ![Sterben\_01](https://discourse.vtk.org/user_avatar/discourse.vtk.org/sterben_01/32/6142_2.png) [@Sterben\_01](https://discourse.vtk.org/u/Sterben_01)
#### Post date: [November 30, 2022, 8:28am UTC](https://discourse.vtk.org/t/about-casting-from-vtkimagedata-to-vtkdataobject/10014/5 "2022-11-30T08:28:04Z")

</div>

It doesn’t work. I think I might missing some include?

```nohighlight
/home/zhaoz22/Desktop/FINAL/src/Butterworth.cxx: In function ‘int main(int, char**)’:
/home/zhaoz22/Desktop/FINAL/src/Butterworth.cxx:52:52: error: no matching function for call to ‘vtkNIFTIImageWriter::SetInputData(vtkImageData*)’
   52 | NiftWriter->SetInputData (NiftReader->GetOutput()) ;
      | ^
In file included from /usr/include/vtk-6.3/vtkImageReader2.h:42,
                 from /usr/include/vtk-6.3/vtkNIFTIImageReader.h:36,
                 from /home/zhaoz22/Desktop/FINAL/src/Butterworth.cxx:2:
/usr/include/vtk-6.3/vtkImageAlgorithm.h:58:8: note: candidate: ‘void vtkImageAlgorithm::SetInputData(vtkDataObject*)’
   58 | void SetInputData(vtkDataObject *);
      | ^ ~~~~~~~~~~~
/usr/include/vtk-6.3/vtkImageAlgorithm.h:58:21: note: no known conversion for argument 1 from ‘vtkImageData*’ to ‘vtkDataObject*’
   58 | void SetInputData(vtkDataObject *);
      | ^ ~~~~~~~~~~~~~~
/usr/include/vtk-6.3/vtkImageAlgorithm.h:59:8: note: candidate: ‘void vtkImageAlgorithm::SetInputData(int, vtkDataObject*)’
   59 | void SetInputData(int, vtkDataObject*);
      | ^ ~~~~~~~~~~~
/usr/include/vtk-6.3/vtkImageAlgorithm.h:59:8: note: candidate expects 2 arguments, 1 provided
make[2]: *** [CMakeFiles/Butterworth.dir/build.make:63: CMakeFiles/Butterworth.dir/Butterworth.cxx.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:76: CMakeFiles/Butterworth.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

```

I included following header files:

```nohighlight
#include <iostream>
#include <vtkNIFTIImageReader.h>
#include <vtkNIFTIImageWriter.h>
#include <vtkSmartPointer.h>
#include <vtkImageReader.h>
#include <vtkImageWriter.h>

```

---

<div class="post-metadata">

### Author: ![mwestphal](https://discourse.vtk.org/user_avatar/discourse.vtk.org/mwestphal/32/19_2.png) [@mwestphal](https://discourse.vtk.org/u/mwestphal)
#### Post date: [November 30, 2022, 8:32am UTC](https://discourse.vtk.org/t/about-casting-from-vtkimagedata-to-vtkdataobject/10014/6 "2022-11-30T08:32:49Z")

</div>

Indeed, you need `#include <vtkImageData.h>`

---

<div class="post-metadata">

### Author: ![Sterben\_01](https://discourse.vtk.org/user_avatar/discourse.vtk.org/sterben_01/32/6142_2.png) [@Sterben\_01](https://discourse.vtk.org/u/Sterben_01)
#### Post date: [November 30, 2022, 8:43am UTC](https://discourse.vtk.org/t/about-casting-from-vtkimagedata-to-vtkdataobject/10014/7 "2022-11-30T08:43:02Z")

</div>

everything works fine. Thank you!
