Was ist falsch?



  • also hab ne Anwendung.
    Der hab ich jetz ne neue header-datei zugefügt, klappt wunderbar!
    Jetz hab ich ne neue Quellcodedatei zugefügt, beim compilieren kommt das:

    fatal error C1010: Unerwartetes Dateiende waehrend der Suche nach der Direktive fuer die vorkompilierte Header-Datei

    ?? Was ist falsch???



  • meist ne Klammer oder ein Include vergessen. Wenn die Klass nicht zu lang ist, zeig mal Header / Quellcode



  • das sind eigentlich nur meherer funktionen:

    #include "grabg.h"
    #include <math.h>

    void MacheVerbindungen(void)
    {
    int dis=0;
    int v=0,fa=0,fm=0;

    AnzahlFelder=SucheVerbindungen();

    while(v<AnzahlFelder)
    {
    for(int i=0;i<(AnzahlFelder*AnzahlFelder);i++)
    {
    if(MVerbindungen[i].distanz==dis)
    {
    PruefeVerbindung(v,&fa,&fm,MVerbindungen[i].x2,MVerbindungen[i].y2,MVerbindungen[i].x1,MVerbindungen[i].y1,
    MVerbindungen[i].x2,MVerbindungen[i].y2);

    if((MVerbindungen[i].typ==2)&&fm);
    else if((MVerbindungen[i].typ==5)&&fa);
    else
    {

    Verbindungen[v].x1=MVerbindungen[i].x1;
    Verbindungen[v].y1=MVerbindungen[i].y1;
    Verbindungen[v].x2=MVerbindungen[i].x2;
    Verbindungen[v].y2=MVerbindungen[i].y2;
    Verbindungen[v].typ=MVerbindungen[i].typ;
    Verbindungen[v].distanz=MVerbindungen[i].distanz;
    v++;

    AktualisiereVerbindungen(v,MVerbindungen[i].x1,MVerbindungen[i].y1,MVerbindungen[i].x2,
    MVerbindungen[i].y2,MVerbindungen[i].typ);
    }
    fa=0;fm=0;
    }
    }
    dis++;
    }
    }

    int Abstand(int x1,int y1,int x2,int y2)
    {
    return((abs(x1-x2)+abs(y1-y2)));
    }

    int SucheVerbindungen(void)
    {
    int pos=0;
    int tempx,tempy,tempdis;

    for(int i=0;i<PlanY;i++)
    for(int j=0;j<PlanX;j++)
    {
    if(Plan[i][j]==2)
    {
    tempdis=1000;
    for(int k=0;k<PlanY;k++)
    for(int l=0;l<PlanX;l++)
    {
    if((Plan[k][l]==2)&&((k!=i)||(l!=j)))
    {
    MVerbindungen[pos].x1=j;
    MVerbindungen[pos].y1=i;
    MVerbindungen[pos].x2=l;
    MVerbindungen[pos].y2=k;
    MVerbindungen[pos].typ=2;
    MVerbindungen[pos].distanz=Abstand(j,i,l,k);
    pos++;
    }
    else if(Plan[k][l]==5)
    {
    if(Abstand(j,i,l,k)<tempdis)
    {
    tempdis=Abstand(j,i,l,k);
    tempx=l;
    tempy=k;
    }
    }
    }
    MVerbindungen[pos].x1=j;
    MVerbindungen[pos].y1=i;
    MVerbindungen[pos].x2=tempx;
    MVerbindungen[pos].y2=tempy;
    MVerbindungen[pos].typ=5;
    MVerbindungen[pos].distanz=tempdis;
    pos++;
    }
    }
    return(sqrt(pos));
    }

    void LoescheVerbindung(int l)
    {
    MVerbindungen[l].x1=-1;
    MVerbindungen[l].y1=-1;
    MVerbindungen[l].x2=-1;
    MVerbindungen[l].y2=-1;
    MVerbindungen[l].typ=-1;
    MVerbindungen[l].distanz=-1;
    }

    void PruefeVerbindung(int anz,int* flagausen,int* flagmine,int ax,int ay,int nx,int ny,int px,int py)
    {
    for(int m=0;m<anz;m++)
    {
    if(((nx==Verbindungen[m].x1)&&(ny==Verbindungen[m].y1))&&((ax!=Verbindungen[m].x2)||(ay!=Verbindungen[m].y2)))
    {
    if(Verbindungen[m].typ==5) *flagausen=1;

    if((px==Verbindungen[m].x2)&&(py==Verbindungen[m].y2))
    *flagmine=1;
    else PruefeVerbindung(anz,flagausen,flagmine,nx,ny,Verbindungen[m].x2,Verbindungen[m].y2,px,py);
    }
    else if(((nx==Verbindungen[m].x2)&&(ny==Verbindungen[m].y2))&&((ax!=Verbindungen[m].x1)||(ay!=Verbindungen[m].y1)))
    {
    if(Verbindungen[m].typ==5) *flagausen=1;

    if((px==Verbindungen[m].x1)&&(py==Verbindungen[m].y1))
    *flagmine=1;
    else PruefeVerbindung(anz,flagausen,flagmine,nx,ny,Verbindungen[m].x1,Verbindungen[m].y1,px,py);
    }
    }
    }

    void AktualisiereVerbindungen(int anz,int tempx1,int tempy1,int tempx2,int tempy2,int temptyp)
    {
    int flag1=0,flag2=0;

    for(int l=0;l<anz;l++)
    {
    if(((tempx1==Verbindungen[l].x1)&&(tempy1==Verbindungen[l].y1))||
    ((tempx1==Verbindungen[l].x2)&&(tempy1==Verbindungen[l].y2))) flag1++;

    if(((tempx2==Verbindungen[l].x1)&&(tempy2==Verbindungen[l].y1))||
    ((tempx2==Verbindungen[l].x2)&&(tempy2==Verbindungen[l].y2))) flag2++;

    for(int m=0;m<(AnzahlFelder*AnzahlFelder);m++)
    {
    if(flag1>=2)
    if(((tempx1==MVerbindungen[m].x1)&&(tempy1==MVerbindungen[m].y1))||
    ((tempx1==MVerbindungen[m].x2)&&(tempy1==MVerbindungen[m].y2)))
    LoescheVerbindung(m);
    if(flag2>=2)
    if(((tempx2==MVerbindungen[m].x1)&&(tempy2==MVerbindungen[m].y1))||
    ((tempx2==MVerbindungen[m].x2)&&(tempy2==MVerbindungen[m].y2)))
    LoescheVerbindung(m);
    }
    if((tempx1==MVerbindungen[l].x1)&&(tempy1==MVerbindungen[l].y1))
    {
    if(temptyp==5)
    LoescheVerbindung(l);

    else if(temptyp==2)
    {
    //if(MVerbindungen[l].typ!=5)
    // LoescheVerbindung(l);
    for(int m=0;m<(AnzahlFelder*AnzahlFelder);m++)
    {
    if((tempx1==MVerbindungen[m].x2)&&(tempy1==MVerbindungen[m].y2))
    {
    if((tempx2==MVerbindungen[m].x1)&&(tempy2==MVerbindungen[m].y1))
    LoescheVerbindung(m);
    else
    if(MVerbindungen[m].distanz>Abstand(MVerbindungen[m].x1,MVerbindungen[m].y1,tempx2,tempy2))
    LoescheVerbindung(m);
    }
    }
    }
    }
    }
    }



  • Würdest Du die Freundlichkeit besitzen Deinen letzten Beitrag zu editieren und diesen Ellenlangen Quellcode C/C++-Style zu stylen!!! Das erleichtert das Lesen und Helfen ungemein!!!



  • also ich hab die grabg.h:

    darin ist enthalten:

    int Pqg=20;
    int Psx=10,Psy=10;
    int AnzahlFelder;
    
    struct Vbdg                                               
    {
    	int x1,x2,y1,y2;
    	int typ;
    	int distanz;
    } MVerbindungen[100],Verbindungen[10];
    
    int Abstand(int x1,int y1,int x2,int y2);
    int SucheVerbindungen(void);
    void LoescheVerbindung(int l);
    void PruefeVerbindung(int anz,int* flagausen,int* flagmine,int ax,int ay,int nx,int ny,int px,int py);
    void AktualisiereVerbindungen(int anz,int tempx1,int tempy1,int tempx2,int tempy2,int temptyp);
    void MacheVerbindungen(void);
    

    So, und dann hab ich eben noch die grabg.cpp und darin sind:

    #inlcude "grabg.h"
    #inlcude <math.h>
    

    und eben die definitionen der Funktionen, z.B. :

    int SucheVerbindungen(void)
    {
         Quellcode;
    }
    

    So bbin mir sicher dass die Funktionen richtig sind, also alle kllammern ok sind.

    Wieso der Fehler?

    Vielen Dank für deine Hilfe!!



  • kleiner Tip am Rande beim #include immer zu erst die in < > und dann die in " " sonst kann es zu solche Fehlern kommen wie du oben beschreibst. Muss aber nicht daran liegen ...



  • TRaTaHUaLPa schrieb:

    also hab ne Anwendung.
    Der hab ich jetz ne neue header-datei zugefügt, klappt wunderbar!
    Jetz hab ich ne neue Quellcodedatei zugefügt, beim compilieren kommt das:

    fatal error C1010: Unerwartetes Dateiende waehrend der Suche nach der Direktive fuer die vorkompilierte Header-Datei

    ?? Was ist falsch???

    Der Fehler liegt darin das Dein Projekt vorkompilierte Header verwendet und der Kompiler sucht in jeder *.CPP Datei nach der Präprozessordirektive:

    #include "stdafx.h"

    Diese Zeile muss VOR allen anderen Includes stehen und das in jeder CPP-Datei! Am besten sogar als erste Zeile im CPP-File.

    Gruss und schönes WE



  • OH,
    schonmal vielen vielen Dank!!

    Hab jetzt:

    eine grabg.h mit allen Deklarationen und eine grabg.cpp mit den Definitionen.

    die grabg.h ist in meine Dialoganwendung und die grabg.cpp eingebunden.
    Beide greifen auch auf diese Variablen, die in grabg.h deklariert sind zu.

    jetz kommt beim compilieren das hier :

    grabg.obj : error LNK2005: "int AnzahlFelder" (?AnzahlFelder@@3HA) bereits in A3BwInf_GrabDlg.obj definiert

    darf man denn net zwei .cpp auf die WErte einer .h zugreifen lassen???

    oder was ist falsch?
    schonmal danke



  • Schreibe einfach in den Cpp datein über die ganze #include sachen

    #pragma once
    

    dann tut der Compiler es übergehen falls es schon included wurde ..

    Wenn du kein Visual Studio nimmst oder das auf einem älteren Tool schreibst mache

    #ifndef _<ein namen oder was immer du magst>
    #define _<ein namen oder was immer du magst>
    
    funktion ......
    
    #endif
    

    um die ganzen Funktionsdefinition in deinem Headerfile

    [edit]

    achja und in einer Headerdatei globale varialben sollte man nicht machen.

    Stecke die in die dazugehörende cpp-Datei und binde in der anderen datei wo du das nutzen willst das teil als

    extern AnzahlFelder
    

    ein.



  • Ok,
    vielen Dank, an alle die mir geholfen haben.

    Das mit dem #pragma once hat irgendwie net gnaz gefunzt.
    Hab jetz einfach alles in die header datei gehauen, das ist zwar wohl net so toll, aber es funzt 🙂

    Nohcmal vielen Dank an alle!!



  • Was fehlt ist #include "stdafx.h" als allererstes in der .cpp

    (Siehe precompiled Header - Doku VC++)



  • Die sdtafx.h muss man nicht zwangsläufig einbinden. Vor allem wenn man kein MFC benutzt und nur eine Windows Konsolenanwendung schreibt brauch man die auf jeden Fall nicht.



  • @max: der Fehler wird aber genau dann ausgegeben wenn man
    a) in den Compile-Einstellungen eine Vorkompilierte header-Datei angegeben hat
    b) diese in einer .c / .cpp nicht reinzieht

    Natürlich kann man auch die PCH abschalten. aber m.E. longt sich das schon für die Windows-Header


Anmelden zum Antworten