[solved]Compiling error in CEGUIString.h

For help with general CEGUI usage:
- Questions about the usage of CEGUI and its features, if not explained in the documentation.
- Problems with the CMAKE configuration or problems occuring during the build process/compilation.
- Errors or unexpected behaviour.

Moderators: CEGUI MVP, CEGUI Team

Hedgehog
Just popping in
Just popping in
Posts: 13
Joined: Sat Apr 18, 2009 13:22

[solved]Compiling error in CEGUIString.h

Postby Hedgehog » Sat May 09, 2009 12:49

Hey.

I just upgraded to Ogre 1.6.2 and now when I try to compile my project I get this error output:

Code: Select all

1>------ Build started: Project: herbert_game, Configuration: Debug Win32 ------
1>Compiling...
1>cl : Command line warning D9035 : option 'Wp64' has been deprecated and will be removed in a future release
1>herbert_game.cpp
1>c:\ogresdk\include\cegui\ceguistring.h(644) : error C2059: syntax error : 'constant'
1>c:\ogresdk\include\cegui\ceguistring.h(645) : error C2334: unexpected token(s) preceding '{'; skipping apparent function body
1>c:\ogresdk\include\cegui\ceguistring.h(860) : error C2059: syntax error : 'constant'
1>c:\ogresdk\include\cegui\ceguistring.h(863) : error C2039: 'len' : is not a member of 'std::basic_string<_Elem,_Traits,_Ax>'
1>        with
1>        [
1>            _Elem=char,
1>            _Traits=std::char_traits<char>,
1>            _Ax=std::allocator<char>
1>        ]
1>c:\ogresdk\include\cegui\ceguistring.h(863) : error C2597: illegal reference to non-static member 'std::basic_string<_Elem,_Traits,_Ax>::npos'
1>        with
1>        [
1>            _Elem=char,
1>            _Traits=std::char_traits<char>,
1>            _Ax=std::allocator<char>
1>        ]
1>c:\ogresdk\include\cegui\ceguistring.h(863) : error C3867: 'std::basic_string<_Elem,_Traits,_Ax>::npos': function call missing argument list; use '&std::basic_string<_Elem,_Traits,_Ax>::npos' to create a pointer to member
1>        with
1>        [
1>            _Elem=char,
1>            _Traits=std::char_traits<char>,
1>            _Ax=std::allocator<char>
1>        ]
1>c:\ogresdk\include\cegui\ceguistring.h(863) : error C2568: '==' : unable to resolve function overload
1>Build log was saved at "file://c:\Documents and Settings\Simon Bakkevig\Mine dokumenter\Skole\Hovedoppgave 08-09\herbert_game\herbert_game\obj\Debug\BuildLog.htm"
1>herbert_game - 7 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


I posted here because the error concerned a CGUI header file.

I hope someone can help me.
Last edited by Hedgehog on Mon May 18, 2009 00:58, edited 1 time in total.

Hedgehog
Just popping in
Just popping in
Posts: 13
Joined: Sat Apr 18, 2009 13:22

Re: Compiling error in CEGUIString.h

Postby Hedgehog » Tue May 12, 2009 18:50

Is there no one who can help me with this?

Jamarr
CEGUI MVP
CEGUI MVP
Posts: 812
Joined: Tue Jun 03, 2008 23:59
Location: USA

Re: Compiling error in CEGUIString.h

Postby Jamarr » Wed May 13, 2009 16:38

Sorry, I have no idea. I don't use OGRE and I've never seen that problem. Have you tried asking over on the OGRE forums? Perhaps someone over there has seen it before.

Doing a quick search here did not really turn up much, though I did not look long. Do you perhaps have CEGUI_USEOLDOGRESTRING defined somewhere? I am not very familiar with this preprocessor define but it seems to have something to do with old versions of ogre and cegui strings; perhaps this was necessary for the version of ogre you upgraded from, and is no longer necessary?

That's about all the help I can give you.
If somebody helps you by replying to your thread, upvote him/her as a thanks! Make sure to include your CEGUI.log and everything you tried when posting! And remember that we are not magicians!

earthsruler
Quite a regular
Quite a regular
Posts: 74
Joined: Mon Apr 28, 2008 23:21
Location: Australia

Re: Compiling error in CEGUIString.h

Postby earthsruler » Fri May 15, 2009 00:40

Code Please. :)

Hedgehog
Just popping in
Just popping in
Posts: 13
Joined: Sat Apr 18, 2009 13:22

Re: Compiling error in CEGUIString.h

Postby Hedgehog » Fri May 15, 2009 11:00

This is my setup file

ogre_setup.h

Code: Select all

#include "tour.h"
#include "frameListener.h"
#include <windows.h>
#include <Ogre.h>
#include <OIS/OIS.h>
#include <CEGUI/CEGUI.h>
#include <OgreCEGUIRenderer.h>

#undef min
#undef max

using namespace Ogre;

//Ogre start up. Replacement for ExampleApplication.h
class Application
{
public:
    void go()
    {
      t = tour();
      createRoot();
        defineResources();
        setupRenderSystem();
        createRenderWindow();
        initializeResourceGroups();
      setupInputSystem();
        setupScene();
        setupCEGUI();
      loadNodes();
      createFrameListener();
        startRenderLoop();
    }

    ~Application()
    {
      try{
         //Deletes root and frameListener objects
         delete mListener;
         delete mRoot;
         //Deletes OIS objects
         mInputManager->destroyInputObject(mKeyboard);
         OIS::InputManager::destroyInputSystem(mInputManager);
      }
      catch(Exception e){}
    }

protected:
    Root *mRoot;
    OIS::Keyboard *mKeyboard;
   OIS::Mouse *mMouse;
    OIS::InputManager *mInputManager;
    CEGUI::OgreCEGUIRenderer *mRenderer;
    CEGUI::System *mSystem;
    FrameListener *mListener;
   RenderWindow *mWindow;
   SceneManager *mSceneMgr;
   Camera *mCamera;
   Vector3 objects[9];
   tour t;
   SceneNode* cam_node;

    virtual void createRoot()
    {
      mRoot = new Root();
   }

    virtual void defineResources()
    {
      String secName, typeName, archName;
        ConfigFile cf;
        cf.load("resources.cfg");
      ConfigFile::SectionIterator seci = cf.getSectionIterator();
      while (seci.hasMoreElements())
      {
         secName = seci.peekNextKey();
         ConfigFile::SettingsMultiMap *settings = seci.getNext();
         ConfigFile::SettingsMultiMap::iterator i;
         for (i = settings->begin(); i != settings->end(); ++i)
         {
            typeName = i->first;
            archName = i->second;
            ResourceGroupManager::getSingleton().addResourceLocation(archName, typeName, secName);
         }
      }
    }
   
    virtual void setupRenderSystem()
    {
      mRoot->restoreConfig();
   }
   
    virtual void createRenderWindow()
    {
      mWindow = mRoot->initialise(true);
    }

    virtual void initializeResourceGroups()
    {
      TextureManager::getSingleton().setDefaultNumMipmaps(5);
      ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
    }

    virtual void setupScene()
    {
      Entity *ent;
      mSceneMgr = mRoot->createSceneManager(ST_GENERIC, "Default SceneManager");

      mCamera = mSceneMgr->createCamera("PlayerCam");
        mCamera->setPosition(Vector3(300,120,-300));
        mCamera->lookAt(Vector3(300,120,300));
      mCamera->setNearClipDistance(5);

      Viewport *v = mWindow->addViewport(mCamera);

      Vector3 mSize(2219,410,1554);
      
      
      ent = mSceneMgr->createEntity("Herbert_Game", "herbert_game.mesh");
      SceneNode *node = mSceneMgr->getRootSceneNode()->createChildSceneNode();
      node->attachObject(ent);
      node->yaw(Degree(180));
      mSceneMgr->setAmbientLight(ColourValue(0.6,0.6,0.6));

      const OIS::MouseState &ms = mMouse->getMouseState();
      ms.width = v->getActualWidth();
      ms.height = v->getActualHeight();
    }

    virtual void setupInputSystem()
    {
      //Sets up OIS input
      size_t windowHnd = 0;
      std::ostringstream windowHndStr;
      OIS::ParamList pl;
      RenderWindow *win = mRoot->getAutoCreatedWindow();

      win->getCustomAttribute("WINDOW", &windowHnd);
      windowHndStr << windowHnd;
      pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));
      mInputManager = OIS::InputManager::createInputSystem(pl);

      try
      {
         mKeyboard = static_cast<OIS::Keyboard*>(mInputManager->createInputObject(OIS::OISKeyboard, true)); //change false to true for buffered input
         mMouse = static_cast<OIS::Mouse*>(mInputManager->createInputObject(OIS::OISMouse, true));
      }
      catch (const OIS::Exception &e)
      {
         throw Exception(42, e.eText, "Application::setupInputSystem");
      }
    }

    virtual void setupCEGUI()
    {
      //CEGUI setup (need to add CEGUIBase_d.lib OgreGUIRenderer_d.lib to links->input->Additional Dependencies)
      mRenderer = new CEGUI::OgreCEGUIRenderer(mWindow, Ogre::RENDER_QUEUE_OVERLAY, false, 3000, mSceneMgr);
      mSystem = new CEGUI::System(mRenderer);
      CEGUI::SchemeManager::getSingleton().loadScheme((CEGUI::utf8*)"TaharezLook.scheme");
      mSystem->setDefaultMouseCursor((CEGUI::utf8*)"TaharezLook", (CEGUI::utf8*)"MouseArrow");
      CEGUI::MouseCursor::getSingleton().setImage(CEGUI::System::getSingleton().getDefaultMouseCursor());
    }

   virtual void createFrameListener()
    {
      mListener= new BufferedInputHandler(mWindow, mCamera, mSceneMgr, t, mKeyboard, mMouse);
      mRoot->addFrameListener(mListener);
    }

    void startRenderLoop()
    {
      mRoot->startRendering();   
   }

   virtual void loadNodes(void){
      objects[0] = Vector3(0,-1000,0);
      objects[1] = Vector3(148,2,314);
      objects[2] = Vector3(-846,112,292);
      objects[3] = Vector3(389,2,-372);
      objects[4] = Vector3(-781,60,-370);
      objects[5] = Vector3(469,229,-432);
      objects[6] = Vector3(-426,85,422);
      objects[7] = Vector3(591,2,-509);
      objects[8] = Vector3(0,0,0);

      t.setManager(mSceneMgr);
      t.loadObjects(objects);
      t.setupTour("senario.txt");
      t.setupHint("hint.txt");
      t.objs[1].setVisibility(true);
   }
};


This is my input listener.

frameListener.h:

Code: Select all

#include <sstream>
#include <string>
#include <Ogre.h>
#include <windows.h>
#include <OIS/OIS.h>
#include <CEGUI/CEGUI.h>
#include <OgreCEGUIRenderer.h>

#undef min
#undef max

using namespace Ogre;

CEGUI::MouseButton convertButton(OIS::MouseButtonID buttonID)
{
   switch (buttonID)
    {
    case OIS::MB_Left:
        return CEGUI::LeftButton;

    case OIS::MB_Right:
        return CEGUI::RightButton;

    case OIS::MB_Middle:
        return CEGUI::MiddleButton;

    default:
        return CEGUI::LeftButton;
    }
}

class BufferedInputHandler : public OIS::KeyListener, public OIS::MouseListener, public FrameListener
{
private:
   OIS::Keyboard *keyboard;
   OIS::Mouse *mouse;
   CEGUI::WindowManager *wmgr;
   CEGUI::Window *text, *title, *description, *hint;
   CEGUI::Window *newG, *quit;
   CEGUI::Window *menuRoot, *guiRoot;
   Camera *mCam;
   SceneManager *mSceneMgr;
   bool mContinue, menuSet;
   Vector3 mDirection;
   Real mMove;
   Real mRotate;
   RaySceneQuery *mRayQuery;
   Real terrainHeight;
   tour to;
   int mCounter;
public:
   BufferedInputHandler(RenderWindow* win, Camera* cam, SceneManager *sceneMgr, tour t, OIS::Keyboard *kb = 0, OIS::Mouse *ms = 0)
    {
      mSceneMgr = sceneMgr;
      mCounter = 0;
      mMove = 200;
      mRotate = 0.13;
      terrainHeight = 0.0;
      mContinue = true;
      menuSet = true;
      keyboard = kb;
      mouse = ms;
      mCam = cam;
      to = t;
      
        keyboard->setEventCallback(this);
        mouse->setEventCallback(this);
      // Create RaySceneQuery
        mRayQuery = mSceneMgr->createRayQuery(Ray());
      mDirection = Vector3::ZERO;
      mCam->setFixedYawAxis(true);

      wmgr = CEGUI::WindowManager::getSingletonPtr();

      menuRoot = wmgr->loadWindowLayout("mainMenu.layout");
      guiRoot = wmgr->loadWindowLayout("mainGUI.layout");
      CEGUI::System::getSingleton().setGUISheet(menuRoot);
       
      quit = wmgr->getWindow((CEGUI::utf8*)"Root/Quit");
      quit->subscribeEvent(CEGUI::PushButton::EventClicked, CEGUI::Event::Subscriber(&BufferedInputHandler::quitGame, this));
      
      newG = wmgr->getWindow((CEGUI::utf8*)"Root/New");
      newG->subscribeEvent(CEGUI::PushButton::EventClicked, CEGUI::Event::Subscriber(&BufferedInputHandler::newGame, this));
    }

   bool BufferedInputHandler::quitGame(const CEGUI::EventArgs& arg){
      mContinue = false;
      return true;
   }

   bool BufferedInputHandler::newGame(const CEGUI::EventArgs& arg){
      menuSet = false;
      CEGUI::System::getSingleton().setGUISheet(guiRoot);
      to.objs[mCounter].setVisibility(true);
      title = wmgr->getWindow((CEGUI::utf8*)"Root/Info");
      title->setText(to.objs[mCounter].title);
      title->setVisible(true);
      description = wmgr->getWindow((CEGUI::utf8*)"Root/Info/Text");
      description->setText(to.objs[mCounter].description);
      hint = wmgr->getWindow((CEGUI::utf8*)"Root/Hint/Text");
      hint->setText(to.objs[mCounter].hint);
      return true;
   }

   bool BufferedInputHandler::loadMenu(){
      menuSet = true;
      newG->setText("Continue");
      CEGUI::System::getSingleton().setGUISheet(menuRoot);
      return true;
   }

   bool frameStarted(const FrameEvent &evt)
    {
        keyboard->capture();
        mouse->capture();
      
      Vector3 pos = mCam->getPosition();
      
      if(mDirection != Vector3::ZERO)
         title->setVisible(false);
      
      mCam->moveRelative(mDirection * evt.timeSinceLastFrame);

      Vector3 temp = mCam->getPosition();
      temp.y = terrainHeight + 120.0f;
      mCam->setPosition(temp);

        return mContinue;
    }

    //KeyListener
    virtual bool keyPressed(const OIS::KeyEvent &arg) {
      CEGUI::System *sys = CEGUI::System::getSingletonPtr();
      sys->injectKeyDown(arg.key);
      sys->injectChar(arg.text);
      if(menuSet)
         return true;

      switch(arg.key)
      {
         case OIS::KC_ESCAPE:
            BufferedInputHandler::loadMenu();
            break;

         case OIS::KC_W:
            mDirection.z -= mMove;
            break;

         case OIS::KC_S:
            mDirection.z += mMove;
            break;

         case OIS::KC_A:
            mDirection.x -= mMove;
            break;

         case OIS::KC_D:
            mDirection.x += mMove;
            break;

      }
      return true;
   }
    virtual bool keyReleased(const OIS::KeyEvent &arg) {
      CEGUI::System::getSingleton().injectKeyUp(arg.key);
      if(menuSet)
         return true;
      switch (arg.key)
        {

         case OIS::KC_W:
            mDirection.z += mMove;
            break;

         case OIS::KC_S:
            mDirection.z -= mMove;
            break;

         case OIS::KC_A:
            mDirection.x += mMove;
            break;

         case OIS::KC_D:
            mDirection.x -= mMove;
            break;
      }
      return true;
   }

    // MouseListener
    virtual bool mouseMoved(const OIS::MouseEvent &arg) {
      CEGUI::System::getSingleton().injectMouseMove(arg.state.X.rel, arg.state.Y.rel);
      if (arg.state.buttonDown(OIS::MB_Right) && !menuSet)
        {
            mCam->yaw(Degree(-mRotate * arg.state.X.rel));
            mCam->pitch(Degree(-mRotate * arg.state.Y.rel));
        }
      return true;
   }

    virtual bool mousePressed(const OIS::MouseEvent &arg, OIS::MouseButtonID id) {
      CEGUI::System::getSingleton().injectMouseButtonDown(convertButton(id));
      if (arg.state.buttonDown(OIS::MB_Right) && !menuSet){
         CEGUI::MouseCursor::getSingleton().hide();
      }
      if (arg.state.buttonDown(OIS::MB_Left) && !menuSet){
         Real normX = Ogre::Real(arg.state.X.abs)/arg.state.width;
           Real normY = Ogre::Real(arg.state.Y.abs)/arg.state.height;
         Ray mouseRay = mCam->getCameraToViewportRay( normX, normY );
         mRayQuery->setRay(mouseRay);
         mRayQuery->setSortByDistance(true);

         RaySceneQueryResult &result = mRayQuery->execute();
         RaySceneQueryResult::iterator i;
         RaySceneQueryResult::iterator i_final;
   
         i_final = result.end();
         i = result.begin();

         for ( i=result.begin(); i!=i_final; ++i)
         {
            MovableObject* wf = i->movable;
            Real distance = i->distance;
            for(int j = 0; j < 9; j++){
               std::stringstream ss;
               ss << to.objs[j].name;
               std::string test = wf->getName();
               if (to.objs[j].ent->isVisible()){
                  if (wf->getName() == to.objs[j].name){
                     title->setVisible(true);
                     title->setText(to.objs[j].title);
                     hint->setText(to.objs[j].hint);
                     description->setText(to.objs[j].description);
                     if(j != 8){
                        mCounter = j+1;
                        to.objs[j].setVisibility(false);
                        to.objs[j+1].setVisibility(true);
                     }
                     break;
                  }
               }
            }
         }
      }
      return true;
   }

    virtual bool mouseReleased(const OIS::MouseEvent &arg, OIS::MouseButtonID id) {
      CEGUI::System::getSingleton().injectMouseButtonUp(convertButton(id));
      CEGUI::MouseCursor::getSingleton().show();
      return true;
   }
};


There are a few other files but does not use CEGUI.

edit: removed some unnecessary code

User avatar
jacmoe
Just can't stay away
Just can't stay away
Posts: 136
Joined: Sun Apr 03, 2005 14:18
Location: Holbaek, Denmark
Contact:

Re: Compiling error in CEGUIString.h

Postby jacmoe » Fri May 15, 2009 15:19

My includes are:

Code: Select all

#include <CEGUI.h>
#include <CEGUISystem.h>
#include <CEGUISchemeManager.h>
#include <OgreCEGUIRenderer.h>

CEGUISystem includes CEGUIString.. :wink:

Hedgehog
Just popping in
Just popping in
Posts: 13
Joined: Sat Apr 18, 2009 13:22

Re: Compiling error in CEGUIString.h

Postby Hedgehog » Fri May 15, 2009 15:40

I don't think its the includes that's the problem.

When I comment out all the CEGUI code the error is of course gone, but as soon as I try to include the CEGUI.h file, with all other CEGUI code still commented out, the error returns.

Jamarr
CEGUI MVP
CEGUI MVP
Posts: 812
Joined: Tue Jun 03, 2008 23:59
Location: USA

Re: Compiling error in CEGUIString.h

Postby Jamarr » Fri May 15, 2009 16:13

You have to provide more information. You can't just post a compiler-error saying "it doesn't work. here is some generic error" and expect everyone to know what your build environment is. Not everyone here uses ogre and whatever build system you have in place.

What version of CEGUI are you actually using (CEGUIVersion.h)?
What compiler/configuration are you using?
And why not post the code-segments generating the errors, eg: CEGUIString.h lines 644, 645, 860, 863, etc...
If somebody helps you by replying to your thread, upvote him/her as a thanks! Make sure to include your CEGUI.log and everything you tried when posting! And remember that we are not magicians!

Hedgehog
Just popping in
Just popping in
Posts: 13
Joined: Sat Apr 18, 2009 13:22

Re: Compiling error in CEGUIString.h

Postby Hedgehog » Fri May 15, 2009 17:03

Okey, I should have thought of that before I posted, sorry.

I use VS2008, version 0.5.1 (included in the Ogre sdk)

The code where the error is:
line 644-647

Code: Select all

size_type   size(void) const
   {
      return d_cplength;
   }


line 855-872

Code: Select all

int      compare(size_type idx, size_type len, const std::string& std_str, size_type str_idx = 0, size_type str_len = npos) const
   {
      if (d_cplength < idx)
         throw std::out_of_range("Index is out of range for CEGUI::String");

      if (std_str.size() < str_idx)
         throw std::out_of_range("Index is out of range for std::string");

      if ((len == npos) || (idx + len > d_cplength))
         len = d_cplength - idx;

      if ((str_len == npos) || (str_idx + str_len > std_str.size()))
         str_len = (size_type)std_str.size() - str_idx;

      int val = (len == 0) ? 0 : utf32_comp_char(&ptr()[idx], &std_str.c_str()[str_idx], (len < str_len) ? len : str_len);

      return (val != 0) ? ((val < 0) ? -1 : 1) : (len < str_len) ? -1 : (len == str_len) ? 0 : 1;
   }


Hope this helps you help me :p

User avatar
jacmoe
Just can't stay away
Just can't stay away
Posts: 136
Joined: Sun Apr 03, 2005 14:18
Location: Holbaek, Denmark
Contact:

Re: Compiling error in CEGUIString.h

Postby jacmoe » Sat May 16, 2009 00:03

Hedgehog wrote:I don't think its the includes that's the problem.

Did you actually try including the other files? Or are you just guessing?
I run almost exactly the same code as you do, and have no problems. :wink:

Hedgehog
Just popping in
Just popping in
Posts: 13
Joined: Sat Apr 18, 2009 13:22

Re: Compiling error in CEGUIString.h

Postby Hedgehog » Sat May 16, 2009 02:32

Yes I tried all the includes you suggested and I still get the error.

Its very strange, with no extra code but includes I still get the error.

User avatar
jacmoe
Just can't stay away
Just can't stay away
Posts: 136
Joined: Sun Apr 03, 2005 14:18
Location: Holbaek, Denmark
Contact:

Re: Compiling error in CEGUIString.h

Postby jacmoe » Sat May 16, 2009 03:02

I see you are including a lot of stuff.
Remove #include <windows> and see what happens. :wink:

Hedgehog
Just popping in
Just popping in
Posts: 13
Joined: Sat Apr 18, 2009 13:22

Re: Compiling error in CEGUIString.h

Postby Hedgehog » Sat May 16, 2009 04:05

Tried that, no change.

Begging to believe that there is something wrong with my Ogre installation.

Just to be sure, I'll reinstall it.

Edit: reinstall didn't help

User avatar
scriptkid
Home away from home
Home away from home
Posts: 1178
Joined: Wed Jan 12, 2005 12:06
Location: The Hague, The Netherlands
Contact:

Re: Compiling error in CEGUIString.h

Postby scriptkid » Sat May 16, 2009 13:59

Hi,

this is just a wild shot, but are you using the MS standard library, or some other like stlport?
Check out my released snake game using Cegui!

Hedgehog
Just popping in
Just popping in
Posts: 13
Joined: Sat Apr 18, 2009 13:22

Re: Compiling error in CEGUIString.h

Postby Hedgehog » Sat May 16, 2009 14:32

I am using standard MS libs.


Return to “Help”

Who is online

Users browsing this forum: No registered users and 18 guests