Präprozessoranweisung wird übersprungen



  • Hallo,

    Ich verwende für mein main-Programm eine project.lib (enthält u.a. die Klasse KlasseX).

    Wenn ich eine Methode der KlasseX in einem Hauptprogramm durchführe (Pfade von project.lib und include-files sind natürlich gesetzt) und debugge, springe ich in folgende Zeilen rein:

    string
    KlasseX
    ::mf_extractPath(const string &a_sPath)
    {
     string t_sSlash;
     #ifdef LT_LINUX
      t_sSlash.assign("/");
     #elif LT_WINDOWS
      t_sSlash.assign("\");
     #endif
        string::size_type t_sLast = a_sPath.find_last_of(t_sSlash.c_str());
        if(t_sLast != string::npos){
    	return(a_sPath.substr(t_sLast+1));
        }
        else
             return(a_sPath.c_str());
    }
    

    Projekteinstellungen für mein main-Programm:
    C++ -> Präprozessor-Definitionen LT_WINDOWS

    Projekteinstellungen beim Erstellen der project.lib:
    C++ -> Präprozessor-Definitionen: keine Angabe von LT_WINDOWS,LT_LINUX

    Mein Problem:
    Wenn ich debugge springt mein Curser in der Methode mf_extractPath(..) nicht in die Bedingung LT_WINDOWS rein!!!

    Was hab ich falsch eingegeben?



  • Wo befindet sich dieser source? Ich gehe mal davon aus, das in nem cpp file der lib befindet. Bei der compilierung der lib ist keines der beiden symbole defniert, er macht also nichts ( wär ein #error "LT_LINUX oder LT_WINDOW muss defniert werden" falls keines der beiden definiert ist nicht sinnvoll?). 😉



  • Hallo,

    wenn ich die project.lib kompiliere und in Projekteinstellungen->C++->Präprozessordefinitionen LT_WINDOWS angebe, bekomme ich folgende Fehlermeldung:

    //...
    #ifdef LT_LINUX
      t_sSlash.assign("/");
    #elif LT_WINDOWS
      t_sSlash.assign("\");  // error C2001: Zeilenumbruch innerhalb einer Konstanten
    
    #endif
      string::size_type t_sLast = a_sPath.find_last_of(t_sSlash.c_str()); // error C2143: Syntaxfehler : Fehlendes ')' vor 'tag::id'
    
      if(t_sLast != string::npos){ // error C2065: 't_sLast' : nichtdeklarierter Bezeichner
          return(a_sPath.substr(t_sLast+1));
      } else
          return(a_sPath.c_str());
    //...
    

    😕



  • Hallo,

    Vorsicht vor "Escape-Sequenzen", kann man da nur sagen:

    [cpp]
    #ifdef LT_LINUX
    t_sSlash.assign("/");
    #elif LT_WINDOWS
    t_sSlash.assign("\");
    [/cpp]

    MfG



  • Danke!



  • Danke!


Anmelden zum Antworten