|  |  |  |  | 
      In your code, the first step is to #include the
      needed headers:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /* * Copyright information */ #include "viewer-file.h" /* Private structure definition. */ typedef struct { gchar *filename; /* stuff */ } ViewerFilePrivate; /* * forward definitions */ | 
      If the class is being declared as final using
      G_DECLARE_FINAL_TYPE, its instance structure should
      be defined in the C file:
| 1 2 3 4 5 6 | struct _ViewerFile { GObject parent_instance; /* Other members, including private data. */ } | 
      Call the G_DEFINE_TYPE macro (or
      G_DEFINE_TYPE_WITH_PRIVATE if your class needs
      private data — final types do not need private data)
      using the name
      of the type, the prefix of the functions and the parent GType to
      reduce the amount of boilerplate needed. This macro will:
      
viewer_file_get_type
        functionG_DEFINE_TYPE_WITH_PRIVATE)
      If the class has been declared as final using
      G_DECLARE_FINAL_TYPE (see
      the section called “Boilerplate header code”), private data should be placed in
      the instance structure, ViewerFile, and
      G_DEFINE_TYPE should be used instead of
      G_DEFINE_TYPE_WITH_PRIVATE. The instance structure
      for a final class is not exposed publicly, and is not embedded in the
      instance structures of any derived classes (because the class is final);
      so its size can vary without causing incompatibilities for code which uses
      the class. Conversely, private data for derivable classes
      must be included in a private structure, and
      G_DEFINE_TYPE_WITH_PRIVATE must be used.
| 1 | G_DEFINE_TYPE (ViewerFile, viewer_file, G_TYPE_OBJECT) | 
or
| 1 | G_DEFINE_TYPE_WITH_PRIVATE (ViewerFile, viewer_file, G_TYPE_OBJECT) | 
      It is also possible to use the
      G_DEFINE_TYPE_WITH_CODE macro to control the
      get_type function implementation — for instance, to
      add a call to the G_IMPLEMENT_INTERFACE macro to
      implement an interface.