Aktuelle Zeit: 12.05.2025, 23:12

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Ein Fehler
BeitragVerfasst: 19.11.2007, 19:43 
Offline

Registriert: 11.05.2007, 16:35
Beiträge: 31
Ich habe ein Codetechnisches Problem
Folgende fehler:

Zitat:

C:\Dev-C++\main.cpp In function `int main()':
146 C:\Dev-C++\main.cpp [Warning] converting to `int' from `float'
184 C:\Dev-C++\main.cpp `explosion' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)
At global scope:
204 C:\Dev-C++\main.cpp expected constructor, destructor, or type conversion before '->' token
204 C:\Dev-C++\main.cpp expected `,' or `;' before '->' token
205 C:\Dev-C++\main.cpp expected unqualified-id before "return"
205 C:\Dev-C++\main.cpp expected `,' or `;' before "return"
206 C:\Dev-C++\main.cpp expected declaration before '}' token
C:\Dev-C++\Makefile.win [Build Error] [main.o] Error 1



Code:
#include <irrlicht.h>
#include <audiere.h>

using namespace irr;
using namespace video;
using namespace scene;
using namespace core;

int modellife;
int mylife;
int life;
int i;
int rcounter=0;
float frames;
int x = 0;
int y = 75;
int z = 100;

bool shot=false;
char otherplayer[100];

IrrlichtDevice *device=0;

class MyEventReceiver : public IEventReceiver
{
public:
   virtual bool OnEvent(SEvent event)
   {
       if(mylife<0)
         return true;
       if(event.EventType==EET_MOUSE_INPUT_EVENT){
          if(event.MouseInput.Event==EMIE_LMOUSE_PRESSED_DOWN){
            shot=true;
           }
        }       
        if(device && device->getSceneManager()->getActiveCamera())
           device->getSceneManager()->getActiveCamera()->OnEvent(event);
        return true;
    }
};

void iamhit(){
    printf("Du wurdest getroffen! Status:%d %",mylife);

    if(mylife<0){
      printf("Du hast verloren\n");
      modellife=9999;
    }   
    return;
}

int main()
{


   MyEventReceiver receiver;

        // deviceType, windowSize, bits, fullscreen(16/32), stencilbuffer, vsync, eventReceiver
        // 1280x1024,
        device=createDevice(EDT_OPENGL,dimension2d<s32>(1024, 768),32,true,false,true,&receiver);

   IVideoDriver* driver=device->getVideoDriver();
   ISceneManager* smgr=device->getSceneManager();

   IAnimatedMesh* mapmesh=smgr->getMesh("maps/map1.x");  // läd die map
   ISceneNode* map = 0;
   
   map=smgr->addOctTreeSceneNode(mapmesh->getMesh(0));

   IAnimatedMesh* modelmesh=smgr->getMesh("models/tris.md2"); // läd den Feind
   IAnimatedMeshSceneNode* model=smgr->addAnimatedMeshSceneNode(modelmesh);

   model->setMaterialTexture( 0, driver->getTexture("models/@.pcx") );
   model->setPosition(vector3df(0,150,100));
   model->setScale(vector3df(3,3,3));
   model->setMD2Animation(EMAT_RUN);

   

   // setzt dynamische Lichtquellen
   smgr->addLightSceneNode(0,vector3d<f32>(-480,100,970),SColorf(0.1,0.7,0.3),300);
   smgr->addLightSceneNode(0,vector3d<f32>(480,100,700),SColorf(0.1,0.7,0.3),300);
   smgr->addLightSceneNode(0,vector3d<f32>(0,400,0),SColorf(1,1,1),500);
   ILightSceneNode* floater=smgr->addLightSceneNode(0,vector3d<f32>(251,300,766),SColorf(1,0.1,0.2),400);
   ISceneNodeAnimator* floateranim=smgr->createFlyCircleAnimator(vector3d<f32>(251,400,-766),100,0.01);
   floater->addAnimator(floateranim);

   ICameraSceneNode* camera=smgr->addCameraSceneNodeFPS();
   camera->setPosition(vector3df(0,150,20));

   IMetaTriangleSelector* metaselector;
   metaselector=smgr->createMetaTriangleSelector();

   ITriangleSelector* mapselector=smgr->createOctTreeTriangleSelector(mapmesh->getMesh(0), map, 128);
   metaselector->addTriangleSelector(mapselector);
   mapselector->drop();

   ITriangleSelector* modelselector=smgr->createTriangleSelector(modelmesh->getMesh(0), model);
   metaselector->addTriangleSelector(modelselector);
   modelselector->drop();

   aabbox3d<f32> box=model->getBoundingBox();

   ISceneNodeAnimator* anim=smgr->createCollisionResponseAnimator(
      metaselector,camera,(box.MaxEdge-box.getCenter())*3);
   camera->addAnimator(anim);
   anim->drop();

   device->getCursorControl()->setVisible(false);

// Sound mit audiere
   audiere::AudioDevicePtr audiodevice(audiere::OpenDevice());       // name ,  schleife?
   audiere::OutputStreamPtr sndtrck(audiere::OpenSound(audiodevice, "sound/bla.wav", true));
   audiere::OutputStreamPtr aas(audiere::OpenSound(audiodevice, "sound/bsasas1.wav", false));
   aas->setVolume(1);
   sndtrck->setRepeat(true);
   sndtrck->setVolume(0.7);
   sndtrck->play();


//
restart:
   modellife=10;
   mylife=0;

   while(device->run())
   {
      driver->beginScene(true, true, SColor(0,10,10,10));
      smgr->drawAll();
      driver->endScene();
      vector3d<f32> explosion;
     

         if(life==9999){
             mylife=life;
             printf("you win!\n");
             model->setMD2Animation(EMAT_DEATH_FALLBACK);
          }

         if(life<mylife){
             mylife=life;
              aas->play();
             iamhit();
         }   

         int time=(float(rcounter)/frames)*1000;
        rcounter=0;
         ISceneNodeAnimator* runto=smgr->createFlyStraightAnimator(model->getPosition(),vector3df(x,y,z),time,0);
         model->setRotation(vector3df(0,-90,0));
         model->addAnimator(runto);
         runto->drop();
        }   

        if(shot && !aas->isPlaying()){
            aas->play();
            vector3d<f32> direction=camera->getTarget()-camera->getPosition();
            direction.normalize();
            line3d<f32> bullet;
            bullet.start=camera->getPosition();
            bullet.end=camera->getPosition()+direction*1500;
           
            triangle3d<f32> dummy;
            vector3d<f32> mapcollision;
            vector3d<f32> modelcollision;
           
            bool gotmap=smgr->getSceneCollisionManager()->getCollisionPoint(bullet,mapselector,mapcollision,dummy);
            bool gotmodel=smgr->getSceneCollisionManager()->getCollisionPoint(bullet,modelselector,modelcollision,dummy);
            float mapdistance=0;
            float modeldistance=0;

            if(gotmap){
               mapdistance=camera->getPosition().getDistanceFromSQ(mapcollision);
            }
            if(gotmodel){
               modeldistance=camera->getPosition().getDistanceFromSQ(modelcollision);
            }
               
            if(gotmodel && gotmap){
                if(modeldistance<=mapdistance){
                    modellife-=1;
                    aas->stop();
                    aas->play();
                    printf("you score!\n");
                    explosion=modelcollision;
                }
                else
                    explosion=mapcollision;                   
            }   
            if(gotmodel && !gotmap){
                modellife-=1;
                aas->stop();
                aas->play();
                printf("you score!\n");
                explosion=modelcollision;
            }
            if(!gotmodel && gotmap){
                explosion=mapcollision;
            }       
        }
        else if(shot)
          shot=false;   
   }

   device->drop();   
   return 0;
}


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ein Fehler
BeitragVerfasst: 19.11.2007, 20:10 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
wieder ein perfektes beispiel warum es kacke ist, die { nicht in eine neue zeile zu packen... wer hat damit eigentlich mal angefangen?

Die Klammer in Zeile 152 beendet die main-loop. Der ganze rest danach würde also nur aufgerufen werden, wenn das programm kurz vor dem ende ist.

Wenn man die Klammern immer schön ordentlich in eine neue zeile packt, passiert sowas nicht...

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ein Fehler
BeitragVerfasst: 19.11.2007, 20:47 
Offline
Moderator

Registriert: 25.02.2007, 14:35
Beiträge: 323
Wohnort: Münster
Sylence hat geschrieben:
wieder ein perfektes beispiel warum es kacke ist, die { nicht in eine neue zeile zu packen... wer hat damit eigentlich mal angefangen?

Die Klammer in Zeile 152 beendet die main-loop. Der ganze rest danach würde also nur aufgerufen werden, wenn das programm kurz vor dem ende ist.

Wenn man die Klammern immer schön ordentlich in eine neue zeile packt, passiert sowas nicht...


Tja, es geht doch nichts über schön formatierten Code...
Bin da ganz deiner Meinung :)


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ein Fehler
BeitragVerfasst: 19.11.2007, 23:00 
Offline

Registriert: 11.05.2007, 16:35
Beiträge: 31
Nungut, die klammer war tatsächlich schuld (habt ihr das aus erfahrung gesehen, oder besitzt ihr ein editor, dass euch sowas zeigt?)

Weiterhin gibt es 1 fehler.
Zitat:
multiple definition of `main'
first defined here
multiple definition of `device'
first defined here
ld returned 1 exit status
C:\Dev-C++\Makefile.win [Build Error] [irr.exe] Error 1


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ein Fehler
BeitragVerfasst: 19.11.2007, 23:14 
Offline
Moderator

Registriert: 25.02.2007, 14:35
Beiträge: 323
Wohnort: Münster
faas hat geschrieben:
Nungut, die klammer war tatsächlich schuld (habt ihr das aus erfahrung gesehen, oder besitzt ihr ein editor, dass euch sowas zeigt?)


Naja, man sieht das dank den Einrückungen recht schnell.
Aber eine gute IDE (ich weiß nicht wie es mit Dev-Cpp ist), markiert, wenn man eine Klammer markiert, auch das Gegenstück dazu oder hebt es farblich hervor.

Zu den aktuellen Fehlern: Er meitn wohl, dass main jetzt doppelt definiert ist. Bin aber grade ehrlich gesagt zu müde, den fehelr zu suchen.
Hast du denn sonst noch was an dem Code oben geändert oder nur die Klammer entfernt?


marsupial


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ein Fehler
BeitragVerfasst: 19.11.2007, 23:19 
Offline

Registriert: 11.05.2007, 16:35
Beiträge: 31
Mein jetziger code ist unten. Ich habe zwar nichts direkt verändert, aber die fehler tretten nicht mehr auf.
91-99 ist ein neuer code. Gravitation und kollision soll das sein. Ich will mir die map ja nicht nur von einem punkt anschauen, sondern schon herumrennen.
Zitat:
93 C:\Dev-C++\main.cpp cannot convert `irr::scene::ISceneManager*' to `irr::scene::ITriangleSelector*' in initialization
93 C:\Dev-C++\main.cpp expected `,' or `;' before "createOctTreeTriangleSelector"
94 C:\Dev-C++\main.cpp `node' undeclared (first use this function)

113 C:\Dev-C++\main.cpp redeclaration of `irr::scene::ISceneNodeAnimator*anim'
96 C:\Dev-C++\main.cpp `irr::scene::ISceneNodeAnimator*anim' previously declared here
155 C:\Dev-C++\main.cpp [Warning] converting to `int' from `float'




Code:
#include <irrlicht.h>
#include <audiere.h>

using namespace irr;
using namespace video;
using namespace scene;
using namespace core;

int modellife;
int mylife;
int life;
int i;
int rcounter=0;
float frames;
int x = 0;
int y = 75;
int z = 100;

bool shot=false;
char otherplayer[100];

IrrlichtDevice *device=0;

class MyEventReceiver : public IEventReceiver
{
public:
   virtual bool OnEvent(SEvent event)
   {
       if(mylife<0)
         return true;
       if(event.EventType==EET_MOUSE_INPUT_EVENT){
          if(event.MouseInput.Event==EMIE_LMOUSE_PRESSED_DOWN){
            shot=true;
           }
        }       
        if(device && device->getSceneManager()->getActiveCamera())
           device->getSceneManager()->getActiveCamera()->OnEvent(event);
        return true;
    }
};

void iamhit(){
    printf("Du wurdest getroffen! Status:%d %",mylife);

    if(mylife<0){
      printf("Du hast verloren\n");
      modellife=9999;
    }   
    return;
}

int main()
{


   MyEventReceiver receiver;

        // deviceType, windowSize, bits, fullscreen(16/32), stencilbuffer, vsync, eventReceiver
        // 1280x1024,
        device=createDevice(EDT_OPENGL,dimension2d<s32>(800, 600),16,true,false,true,&receiver);

   IVideoDriver* driver=device->getVideoDriver();
   ISceneManager* smgr=device->getSceneManager();

   IAnimatedMesh* mapmesh=smgr->getMesh("map1.x");  // läd die map
   ISceneNode* map = 0;
   
   map=smgr->addOctTreeSceneNode(mapmesh->getMesh(0));

   IAnimatedMesh* modelmesh=smgr->getMesh("feind.md2"); // läd den Feind
   IAnimatedMeshSceneNode* model=smgr->addAnimatedMeshSceneNode(modelmesh);

   model->setMaterialTexture( 0, driver->getTexture("tex.pcx") );
   model->setPosition(vector3df(0,150,100));
   model->setScale(vector3df(3,3,3));
   model->setMD2Animation(EMAT_RUN);

   

   // setzt dynamische Lichtquellen
   smgr->addLightSceneNode(0,vector3d<f32>(-480,100,970),SColorf(0.1,0.7,0.3),300);
   smgr->addLightSceneNode(0,vector3d<f32>(480,100,700),SColorf(0.1,0.7,0.3),300);
   smgr->addLightSceneNode(0,vector3d<f32>(0,400,0),SColorf(1,1,1),500);
   ILightSceneNode* floater=smgr->addLightSceneNode(0,vector3d<f32>(251,300,766),SColorf(1,0.1,0.2),400);
   ISceneNodeAnimator* floateranim=smgr->createFlyCircleAnimator(vector3d<f32>(251,400,-766),100,0.01);
   floater->addAnimator(floateranim);

   ICameraSceneNode* camera=smgr->addCameraSceneNodeFPS();
   camera->setPosition(vector3df(0,150,20));

///////////////////////////////////
   camera->setPosition(core::vector3df(0,150,0));
   ITriangleSelector* selector = smgr creatOctTreeTriangleSelector(mesh->getMesh(0),node, 128);
   node->setTriangleSelector(selector);
   selector->drop();
   ISceneNodeAnimator* anim=smgr->createCollisionResponseAnimator(selector,camera,vector3df(30,50,30));
   camera->addAnimator(anim);
   anim->drop();
////////////////////////////////////
   IMetaTriangleSelector* metaselector;
   metaselector=smgr->createMetaTriangleSelector();

   ITriangleSelector* mapselector=smgr->createOctTreeTriangleSelector(mapmesh->getMesh(0), map, 128);
   metaselector->addTriangleSelector(mapselector);
   mapselector->drop();

   ITriangleSelector* modelselector=smgr->createTriangleSelector(modelmesh->getMesh(0), model);
   metaselector->addTriangleSelector(modelselector);
   modelselector->drop();

   aabbox3d<f32> box=model->getBoundingBox();

   ISceneNodeAnimator* anim=smgr->createCollisionResponseAnimator(
      metaselector,camera,(box.MaxEdge-box.getCenter())*3);
   camera->addAnimator(anim);
   anim->drop();

   device->getCursorControl()->setVisible(false);

// Sound mit audiere
   audiere::AudioDevicePtr audiodevice(audiere::OpenDevice());       // name ,  schleife?
   audiere::OutputStreamPtr sndtrck(audiere::OpenSound(audiodevice, "ddd.wav", true));
   audiere::OutputStreamPtr aas(audiere::OpenSound(audiodevice, "sss.wav", false));
   aas->setVolume(1);
   sndtrck->setRepeat(true);
   sndtrck->setVolume(0.7);
   sndtrck->play();


//
restart:
   modellife=10;
   mylife=0;

   while(device->run())
   {
      driver->beginScene(true, true, SColor(0,10,10,10));
      smgr->drawAll();
      driver->endScene();
      vector3d<f32> explosion;
     

         if(life==9999){
             mylife=life;
             printf("you win!\n");
             model->setMD2Animation(EMAT_DEATH_FALLBACK);
          }

         if(life<mylife){
             mylife=life;
              aas->play();
             iamhit();
         }   

         int time=(float(rcounter)/frames)*1000;
        rcounter=0;
         ISceneNodeAnimator* runto=smgr->createFlyStraightAnimator(model->getPosition(),vector3df(x,y,z),time,0);
         model->setRotation(vector3df(0,-90,0));
         model->addAnimator(runto);
         runto->drop();
 

        if(shot && !aas->isPlaying()){
            aas->play();
            vector3d<f32> direction=camera->getTarget()-camera->getPosition();
            direction.normalize();
            line3d<f32> bullet;
            bullet.start=camera->getPosition();
            bullet.end=camera->getPosition()+direction*1500;
           
            triangle3d<f32> dummy;
            vector3d<f32> mapcollision;
            vector3d<f32> modelcollision;
           
            bool gotmap=smgr->getSceneCollisionManager()->getCollisionPoint(bullet,mapselector,mapcollision,dummy);
            bool gotmodel=smgr->getSceneCollisionManager()->getCollisionPoint(bullet,modelselector,modelcollision,dummy);
            float mapdistance=0;
            float modeldistance=0;

            if(gotmap){
               mapdistance=camera->getPosition().getDistanceFromSQ(mapcollision);
            }
            if(gotmodel){
               modeldistance=camera->getPosition().getDistanceFromSQ(modelcollision);
            }
               
            if(gotmodel && gotmap){
                if(modeldistance<=mapdistance){
                    modellife-=1;
                    aas->stop();
                    aas->play();
                    printf("you score!\n");
                    explosion=modelcollision;
                }
                else
                    explosion=mapcollision;                   
            }   
            if(gotmodel && !gotmap){
                modellife-=1;
                aas->stop();
                aas->play();
                printf("you score!\n");
                explosion=modelcollision;
            }
            if(!gotmodel && gotmap){
                explosion=mapcollision;
            }       
        }
        else if(shot)
          shot=false;   
   }

   device->drop();   
   return 0;
}



Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ein Fehler
BeitragVerfasst: 20.11.2007, 15:13 
Offline
Moderator

Registriert: 25.02.2007, 14:35
Beiträge: 323
Wohnort: Münster
Ersetz mal die Zeile
Code:
ITriangleSelector* selector = smgr creatOctTreeTriangleSelector(mesh->getMesh(0),node, 128);
(Zeile 93)


durch die folgende:
Code:
ITriangleSelector* selector = smgr->createOctTreeTriangleSelector(mesh->getMesh(0),node, 128);


Du hast da das "->" vergessen und außerdem creatOctTree.. statt createOctTree... geschrieben.




Außerdem ist die Variable "node" gar nicht definiert, wenn ich das richtig sehe...


Dann hast du noch in zeile 113 die Variable "anim" deklariert, obwohl sie schon in zeile 96 deklariertwurde. Mach bei Zeile 113 einfach das "ISceneNodeAnimator*" vor anim weg.


marsupial


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ein Fehler
BeitragVerfasst: 20.11.2007, 17:43 
Offline

Registriert: 11.05.2007, 16:35
Beiträge: 31
Danke :)
Die Frage jetzt mag vllt. etwas grotesk erscheinen, aber wie soll ich mesh und node richtig deklariert?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ein Fehler
BeitragVerfasst: 20.11.2007, 18:00 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
faas, vllt. zwei Sachen:
1. Kommentier deinen Code mal besser. Ich werde ihn mir z.B. nicht ansehen, weil ich keine Zeit darauf verschwenden möchte, herumzurätseln, was du an einer bestimmten Stelle gedacht hast, als du das geschrieben hast. /////////////////////////////// ist kein gültiger Kommentar :p

2. Ein bisschen mehr Übung in C++ wäre in dem Fall auch praktisch, dass sind teilweise wirklich Fehler, die du mit etwas Wissen sehr schnell selbst erkannt hättest, zumal der Compiler dir ja die Position selber gesagt hast (z.B. die Sache mit dem "->").

Zitat:
aber wie soll ich mesh und node richtig deklariert?

Das kommt darauf an, was sie darstellen sollen (@1.)

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ein Fehler
BeitragVerfasst: 20.11.2007, 18:04 
Offline

Registriert: 11.05.2007, 16:35
Beiträge: 31
@thephoenix: hmm, du hast recht. Mit irrlicht selbst arbeite ich seit wenigen tagen <7.
der bereich zwischen den //////// (und doch, es müsste richtig sein :D)
ist der neue teil. Ich versuche jetzt aber in der zeit bis marsupial wieder da ist den code zu verbessern (halt mehr kommentare reinzuschreiben) - wobei ich mich damit immer sehr schwer tat.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ein Fehler
BeitragVerfasst: 20.11.2007, 18:21 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Zitat:
wobei ich mich damit immer sehr schwer tat.

Das kommt mit der Zeit. Oder es kommt nie. Die beste Methode ist, zu kommentieren, *bevor* man den Code schreibt.

In den entsprechenden Zeilen versuchst du wohl, den TrangleSelector für die Kamera zu erstellen. Das geht so nicht, ich habe gerade keine Ahnung, wies richtig ist, aber ein TriangleSelector funktioniert wie der Name sagt nur für Meshes.

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ein Fehler
BeitragVerfasst: 20.11.2007, 18:27 
Offline

Registriert: 11.05.2007, 16:35
Beiträge: 31
Oar, es gibt so viele sachen, die ich nicht kenne oder die ich immer wieder vergesse. Dabei ist irrlicht doch für die Einsteigerfreundlichkeit bekannt.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de