DevCpp - Kann Programm nicht ausführen !

NetPerformance

Erfahrenes Mitglied
Hi..

für OpenGL benutze ich als Arbeitsumgebung DevCpp.
Kann sofern mein Programm aus eine Datei besteht, diese ohne probleme compilieren.

Probleme habe ich, sobald mein Programm aus zwei Dateien besteht.
Die Dateien müssen untereinander auf Methoden bzw. Funktionen zugreifen. Diese werden aber leider nicht gefunden, obwohl die andere Datei includet wurde.

Würde mich interessieren, ob ihr das Programm ausführen könnt.. anbei poste ich euch beide Dateien.

Ich bedanke mich im vorraus

Gruß
Aaron

p.s.: kann andere OpenGL Programme ohne Probleme ausführen.



openGLtemplate.cpp

Code:
#include <iostream>
#include <gl/glut.h>
#include "glutcallbacks.h"

/* display-Callback für GLUT         */
void display(void)
{
	/* Virtuelle Kamera in Funktion viewing() */
    examine();
    glClear(GL_COLOR_BUFFER_BIT);

    // Ein Gitter ausgeben
    // grid(10);
    // Stellen Sie hier ihr gewünschtes Objekt dar!
    glutWireTeapot(0.5);
    // Stellen Sie hier ihr gewünschtes Objekt dar!
    glutSwapBuffers();   
}

int main(int argc, char** argv)
{
    // Die Positionsparameter 
    glutInit(&argc, argv);
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize(800, 800);
    glutInitWindowPosition(100, 100);
    glutCreateWindow("MyExamine");
    /* Die Callbacks registrieren */
    callbacks();
    /* Die init-Funktion aufrufen */
    init();

    /* Event-Loop starten */
    glutMainLoop();
    return 0;
}



glutcallbacks.cpp

Code:
#include <iostream.h>
#include "glutcallbacks.h"
#include "gl/gl.h"

// Globale Größen für die Kamera
// Ein Winkel von 76.0 entspricht einem 24 mm Objektiv
// ortho = true entspricht Parallelprojektion ...
bool ortho = false;
GLfloat FOVY = 78.0, ASPECT = 1.0;
GLfloat AZIMUTH = 0.0, ELEVATION = 0.0, RADIUS = 5.0;
// Globale Festlegung, ob ein Gitter in der xy-Ebene dargestellt werden soll
bool GRID = true;

/* Info ausgeben über die Tastaturbelegung                 */
void about(void)
{
    cout << "--------------------------------------------           " << endl;
    cout << " MyExamine                                                  " << endl;
    cout << "                                                                     " << endl;
    cout << " Tastaturkommandos:                                  " << endl;
    cout << "<ESC>: Ausgangssicht rekonstruieren        " << endl;
    cout << "   p: Information über die eingestellt           " << endl;
    cout << "      Sicht ausgeben                                       " << endl;
    cout << "   o: Umschalten zwischen Parallel- und      " << endl;
    cout << "      Zentralprojektion; Default ist                " << endl;
    cout << "      Zentralprojektion.                                  " << endl;
    cout << "   a: Den Azimuth um 1 vergroessern          " << endl;
    cout << "   A: Den Azimuth um 1 verkleinern            " << endl;    
    cout << "   e: Die Elevation um 1 vergroessern         " << endl;
    cout << "   E: Die Elevation um 1 verkleinern            " << endl;  
    cout << "   r:  Den Radius vergroessern                     " << endl;
	cout << "   R: Den Radius verkleinern                        " << endl;
    cout << "   b: Verkleinern des Oeffnungswinkels       " << endl;
    cout << "   B: Vergroessern des Oeffnungswinkels    " << endl;
    cout << "  ^g: Gitter in der xy-Ebene an- und aus.    " << endl;
    cout << "      Default ist an.                                        " << endl;    
    cout << "   i: Diesen Text ausgeben                           " << endl;    
    cout << endl;
    cout << " q/Q: Programm beenden                            " << endl;
    cout << "--------------------------------------------          " << endl;	
}

/* Verpacken der Kamera-Statements in einer Funktion       */
void examine(void)
{
	// Die Projektion festlegen
    glMatrixMode(GL_PROJECTION);
       glLoadIdentity();
       if (ortho)
           glOrtho(-1.0, 1.0, -1.0, 1.0, 0.5, 20.0);
       else
           gluPerspective(FOVY, ASPECT, 0.5, 20.0);
           
    glMatrixMode(GL_MODELVIEW);
       glLoadIdentity();
       glTranslatef(0.0, 0.0, -RADIUS);
       glRotatef(-ELEVATION, 1.0, 0.0, 0.0);
       glRotatef(AZIMUTH, 0.0, 1.0, 0.0);
}

void printEye(void)
{
	cout << endl;
	cout << "--------------------------------------------" << endl;
	cout << " Die Sichtdefinition:                       " << endl;
	cout << endl;
	if (ortho)
	  cout << " Parallelprojektion                         " << endl;
	else {
	  cout << " Zentralprojektion                           " << endl;
	  cout << " Öffnungswinkel: " << FOVY << endl;
	} 
	cout << endl;	
	cout << " Azimuth: " << AZIMUTH << endl;
	cout << " Elevation: " << ELEVATION << endl;
	cout << " Radius: " << RADIUS << endl;
	cout << "--------------------------------------------" << endl;	
}
	
void grid(int nL)
{
	int i;
	if (GRID) {
      glBegin(GL_LINES);
	  for (i = -nL; i<= nL; i++) {
	   glVertex3f((float)i, 0, (float)nL);
	   glVertex3f((float)i, 0, (float)(-nL));
	  }
	  glEnd();
	
      glBegin(GL_LINES);
	  for (i = -nL; i<= nL; i++) {
	   glVertex3f((float)nL,0,(float)i);
	   glVertex3f((float)(-nL),0,(float)i);
	  }
	  glEnd();			
	}
}

void init(void)
{
    /* Hintergrundfarb-Anteile in RGBA,
       Default ist weisser Hintergrund    */
    GLclampf red=1.0, green=1.0, blue=1.0, alpha=1.0;
    /* Farbe, die zum Zeichnen benutzt wird
       als RGB-Vektor                     */
    GLfloat drawColor[3]={0.0,0.0,0.0};

    /* Hintergrund festlegen*/
    glClearColor(red,green,blue,alpha); 
    glClear(GL_COLOR_BUFFER_BIT);
 
    /* Zeichenfarbe          */
    glColor3fv(drawColor);
    /* Liniendicke           */
    glLineWidth(3.0);
    /* Nur Drahtgeometrie    */
    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

    about();
}


/* reshape-Callback für GLUT         */
void reshape(int w, int h)
{
    /* Hintergrundfarb-Anteile in RGBA,
       Default ist weisser Hintergrund    */
    GLclampf red=1.0, green=1.0, blue=1.0, alpha=1.0;
    // Viewport 
    glViewport(0,0, (GLsizei) w, (GLsizei) h);

    ASPECT = (float)w/(float)h;
    
    // Attribute
    glClearColor(red,green,blue,alpha); /* Hintergrund festlegen*/
    glClear(GL_COLOR_BUFFER_BIT);
}

/* String-Callback für GLUT         */
void keyboard(unsigned char key, int x, int y)
{
    switch( key ) {
       case 'a': AZIMUTH += 1.0;
                 glutPostRedisplay();
                 break; 
       case 'A': AZIMUTH -= 1.0;
                 glutPostRedisplay();
                 break;  
       case 'e': ELEVATION -= 1.0;
                 glutPostRedisplay();
                 break; 
       case 'E': ELEVATION += 1.0;
                 glutPostRedisplay();
                 break;                                       	
       case 'r': RADIUS += 0.2;
                 glutPostRedisplay();
                 break; 
       case 'R': RADIUS -= 0.2;
                 glutPostRedisplay();
                 break;                             
       case 'o': ortho = !ortho;
                 glutPostRedisplay();
                 break;      
       case 'b': FOVY -= 5.0;
                 glutPostRedisplay();   
                 break;                                                    
       case 'B': FOVY += 5.0;
                 glutPostRedisplay();
                 break;
       case 27:  FOVY = 78.0; AZIMUTH = 0.0; ELEVATION = 0.0;
                 RADIUS = 5.0;
                 glutPostRedisplay();
                 break;
       case 'i': about();
                 break;
       case 'p': printEye();
                 break;
       case 'G'-64: GRID = !GRID;
                    glutPostRedisplay();       
                    break;                 
	   case 'q':
	   case 'Q': exit(0);
	             break;
	   default:
			  break;
	}
}

void mouseMenu(int id)
{
    switch (id) {
		case 1: exit(0);
		        break;
		case 2: about();
		        break;
		case 100: FOVY = 78.0; AZIMUTH = 0.0; ELEVATION = 0.0;
                  RADIUS = 5.0;
                  glutPostRedisplay();
                  break;
        case 120: printEye();
                  break;
        case 200: ortho = !ortho;
                  glutPostRedisplay();
                  break;
		default:
			break;
	}
}

void callbacks(void)
{
    /* display registrieren, muß vorher implementiert sein */
    glutDisplayFunc(display);
    /* keyboard registrieren */
    glutKeyboardFunc(keyboard);
    /* Reshape registrieren */
    glutReshapeFunc(reshape);

    /* Rechte Maustaste zum ordnungsgemässen Beenden! */
    glutCreateMenu(mouseMenu);
    glutAddMenuEntry("Projektion umschalten", 200);
    glutAddMenuEntry("Reset Camera", 100);
    glutAddMenuEntry("Print Camera", 120);
    glutAddMenuEntry("About ...", 2);
    glutAddMenuEntry("Quit",1);
    glutAttachMenu(GLUT_RIGHT_BUTTON);
    return;
}
 
Also irgendwie verstehe ich dich nicht ganz.
Welches Problem hast du? Kannst du dein Programm nicht Compilieren/Linken (Fehlermeldungen?) oder stürtzt dein Programm nach dem Start ab?
Beschreib mal bischen detaillierter.

Gruß Daniel
 
Hi folgendes compiliert und läuft bei mir ganz gut:

glutcallbacks.h (Funktionsdeklarationen):
Code:
#ifndef GLUTCALLBACKS_H
#define GLUTCALLBACKS_H

#include <GL/glut.h>
// Globale Größen für die Kamera
// Ein Winkel von 76.0 entspricht einem 24 mm Objektiv
// ortho = true entspricht Parallelprojektion ...


/* Info ausgeben über die Tastaturbelegung                 */
void about(void);
/* Verpacken der Kamera-Statements in einer Funktion       */
void examine(void);
/* display-Callback für GLUT         */
void display(void);

void printEye(void);
        
void grid(int nL);

void init(void);

/* reshape-Callback für GLUT         */
void reshape(int w, int h);

/* String-Callback für GLUT         */
void keyboard(unsigned char key, int x, int y);

void mouseMenu(int id);

void callbacks(void);

#endif

glutcallbacks.cpp (Funktionimplementationen):
Code:
#include <iostream>
#include <GL/gl.h>
#include "glutcallbacks.h"
       
using namespace std;
       
bool ortho = false;
GLfloat FOVY = 78.0, ASPECT = 1.0;
GLfloat AZIMUTH = 0.0, ELEVATION = 0.0, RADIUS = 5.0;
// Globale Festlegung, ob ein Gitter in der xy-Ebene dargestellt werden soll
bool GRID = true;
/* Info ausgeben über die Tastaturbelegung                 */
void about(void)
{
    cout << "--------------------------------------------           " << endl;
    cout << " MyExamine                                                  " << endl;
    cout << "                                                                     " << endl;
    cout << " Tastaturkommandos:                                  " << endl;
    cout << "<ESC>: Ausgangssicht rekonstruieren        " << endl;
    cout << "   p: Information über die eingestellt           " << endl;
    cout << "      Sicht ausgeben                                       " << endl;
    cout << "   o: Umschalten zwischen Parallel- und      " << endl;
    cout << "      Zentralprojektion; Default ist                " << endl;
    cout << "      Zentralprojektion.                                  " << endl;
    cout << "   a: Den Azimuth um 1 vergroessern          " << endl;
    cout << "   A: Den Azimuth um 1 verkleinern            " << endl;
    cout << "   e: Die Elevation um 1 vergroessern         " << endl;
    cout << "   E: Die Elevation um 1 verkleinern            " << endl;
    cout << "   r:  Den Radius vergroessern                     " << endl;
        cout << "   R: Den Radius verkleinern                        " << endl;
    cout << "   b: Verkleinern des Oeffnungswinkels       " << endl;
    cout << "   B: Vergroessern des Oeffnungswinkels    " << endl;
    cout << "  ^g: Gitter in der xy-Ebene an- und aus.    " << endl;
    cout << "      Default ist an.                                        " << endl;
    cout << "   i: Diesen Text ausgeben                           " << endl;
    cout << endl;
    cout << " q/Q: Programm beenden                            " << endl;
    cout << "--------------------------------------------          " << endl;
}         
/* Verpacken der Kamera-Statements in einer Funktion       */
void examine(void)
{         
        // Die Projektion festlegen
    glMatrixMode(GL_PROJECTION);
       glLoadIdentity();
       if (ortho)
           glOrtho(-1.0, 1.0, -1.0, 1.0, 0.5, 20.0);
       else
           gluPerspective(FOVY, ASPECT, 0.5, 20.0);

    glMatrixMode(GL_MODELVIEW);
       glLoadIdentity();
       glTranslatef(0.0, 0.0, -RADIUS);
       glRotatef(-ELEVATION, 1.0, 0.0, 0.0);
       glRotatef(AZIMUTH, 0.0, 1.0, 0.0);
}         
/* display-Callback für GLUT         */
void display(void)
{         
        /* Virtuelle Kamera in Funktion viewing() */
    examine();
    glClear(GL_COLOR_BUFFER_BIT);
          
    // Ein Gitter ausgeben
    // grid(10);
    // Stellen Sie hier ihr gewünschtes Objekt dar!
    glutWireTeapot(0.5);
    // Stellen Sie hier ihr gewünschtes Objekt dar!
    glutSwapBuffers();
}

void printEye(void)
{
        cout << endl;
        cout << "--------------------------------------------" << endl;
        cout << " Die Sichtdefinition:                       " << endl;
        cout << endl;
        if (ortho)
          cout << " Parallelprojektion                         " << endl;
        else {
          cout << " Zentralprojektion                           " << endl;
          cout << " Öffnungswinkel: " << FOVY << endl;
        }
        cout << endl;
        cout << " Azimuth: " << AZIMUTH << endl;
        cout << " Elevation: " << ELEVATION << endl;
        cout << " Radius: " << RADIUS << endl;
        cout << "--------------------------------------------" << endl;
}

void grid(int nL)
{
        int i;
        if (GRID) {
      glBegin(GL_LINES);
          for (i = -nL; i<= nL; i++) {
           glVertex3f((float)i, 0, (float)nL);
           glVertex3f((float)i, 0, (float)(-nL));
          }
          glEnd();

      glBegin(GL_LINES);
          for (i = -nL; i<= nL; i++) {
           glVertex3f((float)nL,0,(float)i);
           glVertex3f((float)(-nL),0,(float)i);
          }
          glEnd();
        }
}

void init(void)
{
    /* Hintergrundfarb-Anteile in RGBA,
       Default ist weisser Hintergrund    */
    GLclampf red=1.0, green=1.0, blue=1.0, alpha=1.0;
    /* Farbe, die zum Zeichnen benutzt wird
       als RGB-Vektor                     */
    GLfloat drawColor[3]={0.0,0.0,0.0};

    /* Hintergrund festlegen*/
    glClearColor(red,green,blue,alpha);
    glClear(GL_COLOR_BUFFER_BIT);

    /* Zeichenfarbe          */
    glColor3fv(drawColor);
    /* Liniendicke           */
    glLineWidth(3.0);
    /* Nur Drahtgeometrie    */
    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

    about();
}

/* reshape-Callback für GLUT         */
void reshape(int w, int h)
{
    /* Hintergrundfarb-Anteile in RGBA,
       Default ist weisser Hintergrund    */
    GLclampf red=1.0, green=1.0, blue=1.0, alpha=1.0;
    // Viewport 
    glViewport(0,0, (GLsizei) w, (GLsizei) h);

    ASPECT = (float)w/(float)h;

    // Attribute
    glClearColor(red,green,blue,alpha); /* Hintergrund festlegen*/
    glClear(GL_COLOR_BUFFER_BIT);
}

/* String-Callback für GLUT         */
void keyboard(unsigned char key, int x, int y)
{
    switch( key ) {
       case 'a': AZIMUTH += 1.0;
                 glutPostRedisplay();
                 break;
       case 'A': AZIMUTH -= 1.0;
                 glutPostRedisplay();
                 break;
       case 'e': ELEVATION -= 1.0;
                 glutPostRedisplay();
                 break;
       case 'E': ELEVATION += 1.0;
                 glutPostRedisplay();
                 break;
       case 'r': RADIUS += 0.2;
                 glutPostRedisplay();
                 break;
       case 'R': RADIUS -= 0.2;
                 glutPostRedisplay();
                 break;
       case 'o': ortho = !ortho;
                 glutPostRedisplay();
                 break;
       case 'b': FOVY -= 5.0;
                 glutPostRedisplay();
                 break;
       case 'B': FOVY += 5.0;
                 glutPostRedisplay();
                 break;
       case 27:  FOVY = 78.0; AZIMUTH = 0.0; ELEVATION = 0.0;
                 RADIUS = 5.0;
                 glutPostRedisplay();
                 break;
       case 'i': about();
                 break;
       case 'p': printEye();
                 break;
       case 'G'-64: GRID = !GRID;
                    glutPostRedisplay();
                    break;
           case 'q':
           case 'Q': exit(0);
                     break;
           default:
                          break;
        }
}

void mouseMenu(int id)
    switch (id) {
                case 1: exit(0);
                        break;
                case 2: about();
                        break;
                case 100: FOVY = 78.0; AZIMUTH = 0.0; ELEVATION = 0.0;
                  RADIUS = 5.0;
                  glutPostRedisplay();
                  break;
        case 120: printEye();
                  break;
        case 200: ortho = !ortho;
                  glutPostRedisplay();
                  break;
                default:
                        break;
        }
}

void callbacks(void)
{
    /* display registrieren, muß vorher implementiert sein */
    glutDisplayFunc(display);
    /* keyboard registrieren */
    glutKeyboardFunc(keyboard);
    /* Reshape registrieren */
    glutReshapeFunc(reshape);

    /* Rechte Maustaste zum ordnungsgemässen Beenden! */
    glutCreateMenu(mouseMenu);
    glutAddMenuEntry("Projektion umschalten", 200);
    glutAddMenuEntry("Reset Camera", 100);
    glutAddMenuEntry("Print Camera", 120);
    glutAddMenuEntry("About ...", 2);
    glutAddMenuEntry("Quit",1);
    glutAttachMenu(GLUT_RIGHT_BUTTON);
    return;
}

main.cpp:
Code:
#include "glutcallbacks.h"

int main(int argc, char** argv)
{
    // Die Positionsparameter 
    glutInit(&argc, argv);
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize(800, 800);
    glutInitWindowPosition(100, 100);
    glutCreateWindow("MyExamine");
    /* Die Callbacks registrieren */
    callbacks();
    /* Die init-Funktion aufrufen */
    init();

    /* Event-Loop starten */
    glutMainLoop();
    return 0;
}

Compiliert bei mir unter Linux ganz gut du musst Eventuell die Include
Verzeichnisse umschreiben...

Gruß

RedWing
 
Zurück