Here's the last part of this conversation that should have been sent to gtkmm-list earlier.

Kjell

-------- Ursprungligt meddelande --------
Ämne: Re: (process:5746): GLib-GObject-CRITICAL **: gtype.c:2708: You forgot to call g_type_init() - Fedora 16
Datum:  Wed, 7 Dec 2011 14:27:52 -0500
Från:   Phong Cao <[email protected]>
Till:   Kjell Ahlstedt <[email protected]>



Hi Kjell,

Thank you for your solution! It works perfectly!

On Tue, Dec 6, 2011 at 3:12 PM, Kjell Ahlstedt <[email protected] <mailto:[email protected]>> wrote:

   2011-12-06 15:08, Phong Cao skrev:

       Hi Kjell,

       Thank you for the response. I was also thinking that it might be
       the static data members initialization that causes this error.
       The problem is I dont know any other appropriate places to
       initialize them... ?

   Hi,

   I tried to compile and run your program, but it's more
   time-consuming than I thought. I had to first install gstreamermm.
   If I install with Ubuntu's package manager, Synaptic, I get version
   0.10.9, which lacks Gst::Discoverer. Your code requires at least
   version 0.10.10.
   When I tried to install from the git repository with jhbuild, I ran
   into problems when jhbuild built some of the packages that
   gstreamermm depends on. I'm sure those problems are solvable, but I
   don't want to spend the necessary time on it.

   Assuming that the static data in Dingo::DBManager is actually the
   problem, there are some ways to solve it. Defer the creation of real
   objects until first use. E.g. something like this:

   dingo-dbmanager.h
   -----------------
   namespace Dingo {
     class DBManager {
       public:
         static TrackColumnRecord* get_trackCR();
         static PlaylistColumnRecord* get_playlistCR();
         static BehaviorsColumnRecord* get_behaviorsCR();


       private:
         static std::auto_ptr<TrackColumnRecord> trackCR;
         static std::auto_ptr<PlaylistColumnRecord> playlistCR;
         static std::auto_ptr<BehaviorsColumnRecord> behaviorsCR;
     };
   }

   dingo-dbmanager.cc
   ------------------
   std::auto_ptr<Dingo::TrackColumnRecord> Dingo::DBManager::trackCR;
   std::auto_ptr<Dingo::PlaylistColumnRecord> Dingo::DBManager::playlistCR;
   std::auto_ptr<Dingo::BehaviorsColumnRecord>
   Dingo::DBManager::behaviorsCR;

   Dingo::TrackColumnRecord* Dingo::DBManager::get_trackCR()
   {
     if (!trackCR.get())
     {
       trackCR.reset(new Dingo::TrackColumnRecord());
     }
     return trackCR.get();
   }

   // get_playlistCR() and get_behaviorsCR() are similar.

   I don't think the static data with Glib::RefPtr will cause problems.
   It should be possible to initialize a Glib::RefPtr with a 0 pointer
   before anything else has been initialized.

   Kjell




--
Phong V. Cao
[email protected] <mailto:[email protected]>



_______________________________________________
gtkmm-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtkmm-list

Reply via email to