[bt-devel] namespace problems

Joachim Ansorg bt-devel@crosswire.org
Sat, 19 Oct 2002 22:34:23 +0200


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!
-- 
Joachim Ansorg
www.bibletime.de
www.ansorgs.de