[C/C++] Externe Variable benutzen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von .x-tra, 11. November 2010 .

Schlagworte:
  1. 11. November 2010
    Externe Variable benutzen

    Ich habe eine variable global definiert vor der main schleife...
    in der main wird diese aufgerufen bzw. benutzt.
    wenn ich aber eine extra header datei einbinde und dort diese variable benutzen möchte geht das nicht.
    warum?
     
  2. 11. November 2010
    AW: Funktion in extra datei...problem

    Dafür gibts den modifier extern.

    Beispiel:

    main.cpp
    Code:
    const double pi = 3.14;
    test.cpp
    Code:
    extern const double pi;
    So sollte das funktionieren. Kann es leider nicht testen, da ich atm keine C++ Umgebung hier habe.

    greez
     
  3. 11. November 2010
    AW: Externe Variable benutzen

    hier mal der code mit der problembeschreibung


    Code:
    #include "stdafx.h"
    #include "test.h"
    #include <xors3d.h>
    #include <iostream>
    #include "defs.h"
    #include "movement.h"
    
    
    int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
    {
     xGraphics3D(1366, 768, 32, false, true);
     xHidePointer();
     int camera = xCreateCamera(); 
     xPositionEntity(camera, 70, 60, 80);
     int light = xCreateLight();
     xPositionEntity(light, 50, 60, 60);
     xRotateEntity(light, 45, 45, 45);
     int terrain = xLoadMesh("media/terrain.b3d");
     xPositionEntity(terrain, 0, 0, 0);
     int hud_left = xLoadImage("media/hud-left.png");
    
     while(!xKeyDown(KEY_ESCAPE))
     {
    
    
     if(xKeyDown(KEY_W)) xMoveEntity(camera, 0, 0, 1);
     if(xKeyDown(KEY_S)) xMoveEntity(camera, 0, 0, -1);
     if(xKeyDown(KEY_A)) xMoveEntity(camera, -1, 0, 0);
     if(xKeyDown(KEY_D)) xMoveEntity(camera, 1, 0, 0);
     
     xRenderWorld();
     xDrawImage(hud_left, -25, 575);
     xFlip();
     }
     return 0;
    }
    
    funktioniert aber ich will den block...

    Code:
     if(xKeyDown(KEY_W)) xMoveEntity(camera, 0, 0, 1);
     if(xKeyDown(KEY_S)) xMoveEntity(camera, 0, 0, -1);
     if(xKeyDown(KEY_A)) xMoveEntity(camera, -1, 0, 0);
     if(xKeyDown(KEY_D)) xMoveEntity(camera, 1, 0, 0);
    in einer seperaten movement.h datei haben....
    so hier solls dann in der movement.h aussehen und ich will das dann mit move();
    in der main aufrufen können.
    leider kommt dann der fehler weil "camera" nicht bekannt ist...

    Code:
    int move{
     if(xKeyDown(KEY_W)) xMoveEntity(camera, 0, 0, 1);
     if(xKeyDown(KEY_S)) xMoveEntity(camera, 0, 0, -1);
     if(xKeyDown(KEY_A)) xMoveEntity(camera, -1, 0, 0);
     if(xKeyDown(KEY_D)) xMoveEntity(camera, 1, 0, 0);
    }
     
  4. 11. November 2010
    AW: Externe Variable benutzen

    In dem Fall solltest du die kamera der Funktion move als Referenz oder Pointer übergeben.

    also sowas wie
    Code:
    int move(int& camera) {...}
    greez
     
  5. 11. November 2010
    AW: Externe Variable benutzen

    Klingt logisch

    habs so gemacht geht aber noch nicht

    Code:
    #include "stdafx.h"
    #include "test.h"
    #include <xors3d.h>
    #include <iostream>
    #include "defs.h"
    #include "movement.h"
    
    
    
    int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
    {
     xGraphics3D(1366, 768, 32, false, true);
     xHidePointer();
     int camera = xCreateCamera(); 
     xPositionEntity(camera, 70, 60, 80);
     int light = xCreateLight();
     xPositionEntity(light, 50, 60, 60);
     xRotateEntity(light, 45, 45, 45);
     int terrain = xLoadMesh("media/terrain.b3d");
     xPositionEntity(terrain, 0, 0, 0);
     int hud_left = xLoadImage("media/hud-left.png");
     while(!xKeyDown(KEY_ESCAPE))
     {
     move(camera);
     xRenderWorld();
     xDrawImage(hud_left, -25, 575);
     xFlip();
     }
     return 0;
    }
    
    movement.h
    Code:
    int move(int cam)
    {
    
     if(xKeyDown(KEY_W)) xMoveEntity(camera, 0, 0, 1);
     if(xKeyDown(KEY_S)) xMoveEntity(camera, 0, 0, -1);
     if(xKeyDown(KEY_A)) xMoveEntity(camera, -1, 0, 0);
     if(xKeyDown(KEY_D)) xMoveEntity(camera, 1, 0, 0);
     return 0;
    }
     
  6. 11. November 2010
    AW: Externe Variable benutzen

    Genaue Fehlermeldung wäre auch nicht schlecht. So können wir dir auch nur bedingt helfen...

    greez
     
  7. 11. November 2010
    AW: Externe Variable benutzen

    Code:
    1>c:\users\nutzer\desktop\test\test\movement.h(5): error C2065: 'camera': nichtdeklarierter Bezeichner
     
  8. 11. November 2010
    AW: Externe Variable benutzen

    int move(int cam)
    {

    if(xKeyDown(KEY_W)) xMoveEntity(camera, 0, 0, 1);
    ...
    return 0;
    }

    Und jetzt nochmal bitte genau lesen ..
     
  9. 11. November 2010
    AW: Externe Variable benutzen

    Frag mich, wieso Du nicht erstmal die Grundlagen lernst, bevor Du irgenwelche grafischen Anwendungen programmierst. Mit Sätzen wie "Hab was gemacht, geht nicht" kommst Du nicht weit. Zumal man da die Vermutung bekommt, dass Du nicht versucht hast den Fehler zu finden, oder den Code kopiert hast und etwas dran ändern wolltest.

    Lern lieber erstmal die Grundlagen und gewöhn dir einen ordentlichen Stil an, dann hast Du später wenige Probleme und brauchst eventuell nicht mal externe Hilfen (Referenzen ausgenommen, sind immer nützlich).
     
  10. 11. November 2010
    AW: Externe Variable benutzen

    Hab den Fehler vorhin selber bemerkt..habe die engine mit ner anderen sprache genutzt und nun erst mit c++....also nich hauen ich lerne ja noch dazu.
     
  11. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.