Probleme beim einbinden von headern



  • Hi, habe einige Beispiele gefunden und auf meines angewandt, kann aber den Fehler nicht finden. Bestimmt nur was kleines, bekomme immer den Fehler Schachbrett not declaratet in the scope...

    Schachbrett.h

    #include <iostream>
    
    using namespace std;
    #define MARK (0x08)
    
    //*******************Schachbrett************************************************************************************************************************************************
    
    class SchachBrett{
        private:
            //0-2. Figuren Typ
            /*  Leer=000
                Bauer=001
                Turm=010
                Springer=011
                Läufer=100
                Dame=101
                König=110
            */
            //3.Bit Mauschaft 1=Schwarz
            char spieler;//Wer gerade dran ist
            //7.Bit Markierung für mögliche Felder
            char Brett[64];//Brett
            char Brettp[64];//Pseudobrett
            char ges[13];//geschlagene Units(0-5:weiß 6:frei 7-12:schwarz)(Bauer,Turm,Springer,Läufer,Dame,König)(theoretisch sind 5,6,12 nie benutzt)
            char aktiv;//welches Feld ausgewählt wurde
    
            int marki(int *sch,int aus,int auso);
            int Schach(int spieler,char Brett[64]);
            int Schachmat(int spieler,char Brett[64]);
            int felderMarkieren(int aus,int sch,char Brett[64],int spieler);
            void set(int aus,char Brett[64]);
    
        public:
            SchachBrett();
            void auswahl(int aus);
            char get(int aus);
            void reset();
            int wahl();
    };
    

    Schachbrett.cpp

    #include <iostream>
    #include "adt.h"
    using namespace std;
    #define MARK (0x08)
    
    int SchachBrett::marki(int *sch,int aus,int auso){
        ...
    }
    
    int SchachBrett::Schach(int spieler,char Brett[64]){
        ...
    }
    
    int SchachBrett::Schachmat(int spieler,char Brett[64]){
      ...
    }
    
    int SchachBrett::felderMarkieren(int aus,int sch,char Brett[64],int spieler){
       ...
    }
    
    void SchachBrett::set(int aus,char Brett[64]){
        ...
    }
    
        public:
    
    SchachBrett::SchachBrett(){
        ...
    };
    
    void SchachBrett::auswahl(int aus){
        ...
    }
    
    char SchachBrett::get(int aus){
        ...
    }
    
    void SchachBrett::reset(){
        ...
    }
    
    int SchachBrett::wahl(){return 5;}//Wahl (derzeit konstant auf Dame)
    

    und die main.cpp

    #include <iostream>
    #include "adt.h"
    
    #include <stdlib.h>
    #include <stdio.h>
    
    #ifdef __APPLE__
    #include <OpenGL/OpenGL.h>
    #include <GLUT/glut.h>
    #else
    #include <windows.h>
    #include <GL/glut.h>
    #endif
    
    using namespace std;
    
    float _angle = 0;            //The rotation of the box
    int spieler=0;
    int breite=100,hoehe=100;
    
    int collison(int x_mouse, int y_mouse){
    
        double aspect = double(breite)/double(hoehe);
        int window_y = (hoehe-y_mouse) - hoehe/2;
        double norm_y = double(window_y)/double(hoehe/2);
        int window_x = x_mouse - breite/2;
        double norm_x = double(window_x)/double(breite/2);
        printf("%d # %d\n",window_y,window_x);
    
        float y = 20 * norm_y;
        float x = 20 * aspect * norm_x;
    
        printf("%f %f\n",y,x);
    
        int i=0;
        while(i*2.4<breite){
            if(2.4*i<x && 2.4*(1+i)>=x){
                printf("x:%d  ",i+5);
                break;
            }
            if(-2.4*i>x && -2.4*(1+i)<=x){
                printf("x:%d  ",-i+4);
                break;
            }
            i++;
        }
    
        i=0;
        while(i*2.4<hoehe){
            if(2.4*i<y && 2.4*(1+i)>=y){
                printf("y:%d \n",i+5);
                break;
            }
            if(-2.4*i>y && -2.4*(1+i)<=y){
                printf("y:%d \n",-i+4);
                break;
            }
            i++;
        }
    
        return -1;
    }
    
    //Für die Tastatur und für die Sondertasten auserhalb ascii
    void handleKeypress(unsigned char key, int x, int y) {    //The current mouse coordinates
        printf("%d\n",key);
    	switch (key) {
    	    default: printf("%d\n",key);break;
    		case 27: exit(0); //Exit the program by ESC
    
    	}
    }
    void processSpecialKeys(int key, int x, int y) {
    	switch(key) {
    		case GLUT_KEY_LEFT :
    				 break;
    		case GLUT_KEY_RIGHT :
    				 break;
    		case GLUT_KEY_UP :
    				 break;
            case GLUT_KEY_DOWN :
    				 break;
    	}
    }
    //Maus
    void MeineMausTasten(int button, int state, int x, int y){
        if(state==  GLUT_DOWN){
            switch(button) {
                case GLUT_LEFT_BUTTON :
                     printf("left");
                     spieler=(spieler+1)%2;
                     break;
                case GLUT_MIDDLE_BUTTON :
                    // printf("middel");
                     printf("%d %d\n",x,y);
    				 break;
                case GLUT_RIGHT_BUTTON :
                     //printf("right");
                     //printf("%d %d\n",x,y);
                     collison(x,y);
    				 break;
            }
        }
    
    }
    
    void initRendering() {
    	glEnable(GL_DEPTH_TEST);
    	glEnable(GL_LIGHTING);
    	glEnable(GL_LIGHT0);
    	glEnable(GL_NORMALIZE);
    	glEnable(GL_COLOR_MATERIAL);
    	glClearColor(0.7f, 0.9f, 1.0f, 1.0f); //Change the background to sky blue
    }
    
    void handleResize(int w, int h) {
        breite=w,hoehe=h;
        if(w<h) h=w;
        else w=h;
    
    	glViewport(0, 0, w, h);
    	breite=w;
    	hoehe=h;
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
    	gluPerspective(45.0,1, 1.0, 200.0);
    	//if(w<h)	gluPerspective(45.0, (float)h/ (float)w, 1.0, 200.0);
    	//else gluPerspective(45.0, (float)h / (float)w, 1.0, 200.0);
    }
    
    //Draws the 3D scene
    void drawScene() {
        float kleinesQuadrat = 1.0f,grosesQuadrat = kleinesQuadrat*8.0f+2.0f;
    
        //Letztes Blatt löschen
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity();
    
        //Transformation
    	glTranslatef(0.0f, 0.0f, -20.0f);
    
        //Licht setzen
    	GLfloat ambientLight[] = {1.0f, 1.0f, 1.0f, 1.0f};
    	glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight);
    
    	//GLfloat lightColor[] = {1.0f, 1.0f, 1.0f, 1.0f};
    	//GLfloat lightPos[] = {-4 * kleinesQuadrat, -4*kleinesQuadrat, 0, 1.0f};
    	//glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor);
    	//glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
    
    	glRotatef(-_angle, 0.0f, 0.0f, 1.0f);
    	glBegin(GL_QUADS);
        //Brett
        glColor3f(0.1f,0.75f,0.3f);
        for(int x=0;x<4;x++){glVertex3f(((x+2)/4)*grosesQuadrat-kleinesQuadrat*4-1,(((x+1)/2)%2)*grosesQuadrat-kleinesQuadrat*4-1,-0.1);}
        //Kästchen
        int Farbe;
        glNormal3f(0.0, 1.0f, 0.0f);
        for(int y=0;y<8;y++){
            for(int x=0;x<32;x++){
                Farbe=(int)((((x)/4)%2+y)%2);
                if(Farbe==0){glColor3f(0.8f,0.75f,0.7f);}
                else {glColor3f(0.3,0.3,0.25);}
                glVertex3f((x+2)/4-kleinesQuadrat*4,((x+1)/2)%2+y-kleinesQuadrat*4,0);
            }
        }
    
    	glEnd();
    	glutSwapBuffers();
    }
    
    void update(int value) {
    	...
    }
    
    int main(int argc, char** argv) {
        Schachbrett *Brett;//######################Hier der Fehler
        Brett=new SchachBrett();
    
    	glutInit(&argc, argv);
    	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    	glutInitWindowSize(1000, 1000);
    
    	glutCreateWindow("Unser Schach Programm v.1");
    	initRendering();
    
    	glutDisplayFunc(drawScene);
    	glutReshapeFunc(handleResize);
    	glutKeyboardFunc(handleKeypress);
    	glutSpecialFunc(processSpecialKeys);
    	glutMouseFunc(MeineMausTasten);
    
    	glutTimerFunc(25, update, 0);
    
    	glutMainLoop();
    	return 0;
    }
    

    Ist mein erstes OpenGl Projekt und auch das erste im Teamwork, der Code ist also noch ne Optimal, Fehler tauscht immer in der Zeile wo ich ein Objekt der class Schachbrett machen will auf

    Danke für eure Hilfe



  • Seppel4 schrieb:

    der Code ist also noch ne Optimal

    Oh ja!
    Du inkludierst doch niergens schachbrett.h



  • mein Fehler adt.h und adt.cpp

    so schlimm? ich habe doch aus Beispielen den Code stark übernommen



  • Seppel4 schrieb:

    mein Fehler adt.h und adt.cpp

    so schlimm? ich habe doch aus Beispielen den Code stark übernommen

    haha^^ coole frage.

    Ja das ist schlimm...
    ein computer macht genau das was er machen soll, und denkt sich nicht: mh vielleicht meint der depp vor mir ja die andere datei...



  • ja ne is klar, die Frage

    so schlimm? ich habe doch aus Beispielen den Code stark übernommen bezog sich

    nicht auf den Fehler das die Datein anders heißen als wie ich es gepostet habe sondern zur qualität des Codes bezüglich der aussage von Jockelx.

    also die Datein heißen adt.c und adt.cpp
    die klasse heißt schachbrett



  • Nein, so schlimm auch nicht.
    Die printf's sind doof und das using im Header auch.
    Und das Schachbrett *Brett; statt Schachbrett Brett.

    Hier hast du übrigens Schachbrett statt Schach B rett geschrieben.
    Im Orginal auch?

    Edit: int* in Funktionssignaturen sind auch eher die Ausnahme.
    Tut da nicht eine Referenz?

    Edit2: Unnötige globale Variablen



  • Die printf's sind doof und das using im Header auch.
    --> ja die kommen noch weg
    Und das Schachbrett Brett; statt Schachbrett Brett.
    -->ok
    Hier hast du übrigens Schachbrett statt Schach B rett geschrieben.
    Im Orginal auch?
    --> das war der Fehler, wusste doch das es was primitives war
    Edit: int
    in Funktionssignaturen sind auch eher die Ausnahme.
    Tut da nicht eine Referenz?
    --> Jetzt musst du mir mal beim suchen helfen, wo genau?

    Edit2: Unnötige globale Variablen
    --> noch was was weg kommen wird

    Danke für deine Hilfe



  • Bei

    int SchachBrett::marki(int *sch,int aus,int auso)
    

    Dazu dann noch ein Punkt: Nichts sagende Variablennamen wie 'sch'



  • die var namen hat mein Kolege gemacht, da dies eine Teamarbeit ist, was die variablen angeht sag ich das ihm auch immer, aber er findet elemente b vom Struct bb immer toll


Anmelden zum Antworten