[bt-devel] namespace problems

Nikolay Igotti bt-devel@crosswire.org
Sun, 20 Oct 2002 11:34:50 -0700 (PDT)


 Joachim, are you sure this namespace based approach is good way to do 
i18n and resources management? I feel it's not. Maybe resourse file 
+resouse manager would be better?

 Nikolay.


On Sat, 19 Oct 2002, Joachim Ansorg wrote:
> David White, I think this eMail is especially for you because you know the 
> namespaces well.
> 
> You pointed me into the direction to use namespaces for the treelike structure 
> I wanted.
> 
> Now I have something like
> 
> namespace CResMgr {
>   inline const QString makeToolTip( const QString& text ) {
>     return text;
>   };
>   inline const QString makeWhatsThis( const QString& title, const QString& 
> description )  {
>     return 
> QString::fromLatin1("<center><B>%1</B></center><HR>%2").arg(title).arg(description);
>   };
> 
>   namespace mainMenu { //Main menu
>     namespace file { //Main menu->File
>       namespace clearQueue {
>         const QString tooltip     = makeToolTip( i18n("Clear the printing 
> queue") );
>         const QString whatsthis   = makeWhatsThis( tooltip, i18n("Clear the 
> print queue of BibleTime. All items will be removed from the list and the 
> print button will be disabled.") );
>         const QString icon        = QString::fromLatin1("queue");
>         const KShortcut accel     = KShortcut();
>         const char* actionName    = "fileClearQueue_action";
>       }
>       namespace print { //a standard action
>         const QString tooltip     = makeToolTip( i18n("Open the 
> printerdialog") );
>         const QString whatsthis   = makeWhatsThis( tooltip, i18n("Open the 
> printer dialog of BibleTime.  Here you can edit the print queue and assign 
> styles to the items.") );
>       }      
>       namespace quit { //a standard action
>         const QString tooltip     = makeToolTip( i18n("Close BibleTime") );
>         const QString whatsthis   = makeWhatsThis( tooltip, i18n("Close 
> BibleTime and save the settings.") );
>       }
>     }
> }
> etc.
> 
> But compiling BibleTime with this header included in two or more places I get 
> the following compiler warnings about multiple symbol definitions:
> 
> ./frontend/searchdialog/libsearchdialog.a(csearchdialog.o)(.data+0x0): 
> multiple definition of `CResMgr::mainMenu::file::clearQueue::actionName' 
> bibletime_init.o(.data+0x0): first defined here 
> ./frontend/searchdialog/libsearchdialog.a(csearchdialog.o)(.data+0x4): 
> multiple definition of `CResMgr::mainMenu::view::showMainIndex::actionName' 
> bibletime_init.o(.data+0x4): first defined here 
> ./frontend/searchdialog/libsearchdialog.a(csearchdialog.o)(.data+0x8): 
> multiple definition of `CResMgr::mainMenu::mainIndex::search::actionName' 
> bibletime_init.o(.data+0x8): first defined here 
> ./frontend/searchdialog/libsearchdialog.a(csearchdialog.o)(.data+0xc): 
> multiple definition of `CResMgr::mainMenu::window::loadProfile::actionName' 
> bibletime_init.o(.data+0xc): first defined here 
> 
> How can I avoid these problems? I have no idea.
> Thank you very much for any help!
>