Compiler Warnung: C4091 was mach ich nur falsch, ausführlich im Posting



  • Wollte mir mit Typedef eine Strukturanlegen die ich dann als neuen Datentyp nutzen kann.
    Funktioniert im Programm auch wunderbar aber er bringt mir immer wieder Warnmeldungen. Wie kann den Compiler nur zufriedenstellen.

    Compiler Warnung:

    warning C4091: 'typedef ': Ignoriert auf der linken Seite von 'SLogFilePath', wenn keine Variable deklariert wurde
    

    Definition:

    typedef struct SLogFilePath
    {
    	CString User;
    	CString Extended;
    };
    

    Im Programm:

    SLogFilePath LogFilePath_A;
    SLogFilePath LogFilePath_B;
    
    LogFilePath_A.User = "blablablub1";
    LogFilePath_A.Extended = "blablablub2";
    
    LogFilePath_B.User = "bliblibla1";
    LogFilePath_B.Extended = "bliblibla1";
    


  • Hallo,

    es gibt zwar kein CString in ANSI-C, aber wollen wir mal nicht so sein, da du ein grundsätzliches Verständnisproblem hast:

    der Compiler sagt dir ganz genau, was fehlt, es fehlt das "Synonym" für die "struct SLogFilePath". Mit typedef wird ein solches eingeführt, also mußt du es auch im typedef schreiben:

    typedef struct SLogFilePath
    {
        CString User;
        CString Extended;
    } SLFPath;
    
    /* ab jetzt kann man SLFPath als Typ verwenden */
    
    SLFPath LogFilePath_A;
    SLFPath LogFilePath_B;
    
    LogFilePath_A.User = "blablablub1";
    LogFilePath_A.Extended = "blablablub2";
    
    LogFilePath_B.User = "bliblibla1";
    LogFilePath_B.Extended = "bliblibla1";
    

    MfG



  • Was willst du ?

    1: einen neuen Datentyp definieren mit dem Namen SLogFilePath
    dann:

    typedef struct
    {
        CString User;
        CString Extended;
    }SLogFilePath;
    

    Um hier eine Variable zu bekommen heißt es dann SLogFilePath Peter;
    zugegriffen wird mit Peter.User

    2: eine Struktur als Variable SLogFilePath anlegen dann:

    struct SLogFilePath
    {
        CString User;
        CString Extended;
    }SLogFilePath;
    

    dann kannst du nur auf SLogFilePath.User und SLogFilePath.Extended zugreifen

    Habe dein Posting nochmal gelesen du willst Methode 1 nutzen.



  • Bin noch nicht so ganz Firm mit C bzw. C++ also seit ein bisserl nachsichtig.

    Wozu kann ich da zwei begriffe angeben ich dachte immer dir Begriff direkt nach Typedef legt mir einen Datentyp an, und er nach der Klammer macht mir eine Instanz davon.

    Habs jetzt so wie vorher beschrieben probiert.

    Sicherung.h:

    typedef struct 
    { 
        CString User; 
        CString Extended; 
    }SLogFilePath;
    
    typedef struct
    {
    	FILE* p_User;
    	FILE* p_Extended;
    } SLogFiles;
    

    Sicherung.cpp

    SLogFilePath LogFilePath;
    SLogFiles LogFiles;
    
    LogFilePath.Extended = "blabla";
    LogFilePath.User = "blibli";
    
    message_open_user(&LogFiles, LogFilePath, LOG_MODUS_USER);
    

    Unterprogramm.h

    #include "Sicherung.h"
    
    int message_open_user(SLogFiles* LogFiles, SLogFilePath LogFilePath, CString log_modus);
    

    Unterprogramm.cpp

    #include "Sicherung.h"
    #include "Unterprogramm.h"
    
    int message_open_user(SLogFiles* LogFiles, SLogFilePath LogFilePath, CString log_modus)
    {
    	LogFiles->p_User = fopen(LogFilePath.User, log_modus);
    	if (LogFiles->p_User == NULL) return STANDART_ERROR;
    	else return STANDART_OK;
    }
    

    Nun stellt sich ein neues Compiler Problem...

    error C2065: 'SLogFilePath': nichtdeklarierter Bezeichner
    error C2065: 'SLogFiles': nichtdeklarierter Bezeichner
    

    Bin langsam mit meinem Latein am Ende.
    Der Quelltext oben stellt nur meine Vorgehensweise dar.
    Wäre dankbar über jeden Hinweis.



  • Ich gehe davon aus, das die Fehler in Unterprogramm.cpp auftretem.

    Arbeitest du mit Visual C++ 6.0 ??

    Falls ja verlass die IDE lösche die Verzeichnisse Debug und Release
    und die Dateien die auf *.ncb; *.opt; *.plg enden

    Starte dann die IDE neu und lasse nochmals alles kompilieren.

    Wir hatten schon öfters Ärge mit der IDE die sich so beheben ließen.

    Die Code Ausschnitte die du gezeigt hast sind IMHO richtig.


Log in to reply