Fehler bei Code mit AnsiString und String



  • Ich weis jetzt wirklich nicht mehr weiter. Habe schon alles mögliche versucht aber ich bekomme es wirklich nicht hin. Vielleicht kann mir ja jemand helfen.
    Hier mal der Code der Units:

    Main.cpp

    #pragma hdrstop
    #include<iostream.h>
    #include "IP.h"
    
    #pragma argsused
    int main(int argc, char* argv[])
    {
    
       IP klasse("129.123.5.5",2,26);
       return 0;
    }
    

    IP.cpp

    #pragma hdrstop
    #include <stdlib.h>
    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    #include <vcl.h>
    #include <iostream.h>
    #include <ostream.h>
    #include "IP.h"
    
    String StringTrennen(String &source,char del,int pos)
    {
       int x=0,oldpos=1;
       while(x++<=source.Length())
       {
          if(source[x]==del)
          {
             if(--pos) oldpos=x+1;
             else
               break;
          }
       }
       return source.SubString(oldpos,x-oldpos);
    }
    IP::IP(string ipadresse, int netbits, int subbits)
    {
      string FirstIP = StringTrennen(ipadresse,'.',1);
      return FirstIP;
    
    };
    

    IP.h

    #ifndef IPH
    #define IPH
    class IP
    {
      private:
      public:
        IP(string ipadresse, int netbits, int subbits);
    };
    #endif
    

    Dabei bekomme ich folgende Fehlermeldungen:
    [C++ Warnung] IP.cpp(33): W8030 Temporäre Größe für Parameter 'source' in Aufruf von 'StringTrennen(AnsiString &,char,int)' verwendet
    [C++ Fehler] IP.cpp(33): E2034 Konvertierung von 'AnsiString' nach 'string' nicht möglich
    [C++ Warnung] IP.cpp(35): W8004 'FirstIP' wurde ein Wert zugewiesen, der nie verwendet wird



  • Hallo

    hier nimmst du den Typ String...

    String StringTrennen(String &source,char del,int pos)
    

    während du hier einen string zum Aufrufen nimmst

    StringTrennen(ipadresse,'.',1);
    

    entscheide dich für einen Typ, dann sollten die ersten beiden Fehler verschwinden.

    und die dritte Meldung kommt von hier

    string FirstIP = StringTrennen(ipadresse,'.',1);
      return FirstIP;
    

    also besser

    return(StringTrennen(ipadresse,'.',1));
    

    bis bald
    akari



  • Wozu hast du in deinem Konstruktor überhaupt ein return?



  • Möchte den TYP string nehmen, aber wie kann ich diesen dann trennen.
    Das return ist nur zum Beispiel da, wird später noch geändert.



  • Hallo

    schau dir string.substr an. funktioniert genau so wie String.SubString, nur das die Zählung bei 0 anfägt.

    bis bald
    akari



  • Dann musst du deine Trennfunktion ein wenig umarbeiten.
    Also:
    statt String string nehmen.
    statt source.Length() source.size() oder source.length() nehmen
    statt source.SubString() source.substr() nehmen

    [edit]dar war wohl jemand schneller 😉 [/edit]



  • @akari

    das habe ich ja in meiner Funktion StringTrennen benutzt.



  • @Braunstein

    wenn ich dies ändere bekomme ich diese Fehlermeldungen:
    [C++ Fehler] IP.cpp(18): E2316 'size' ist kein Element von 'AnsiString'
    [C++ Fehler] IP.cpp(27): E2316 'substring' ist kein Element von 'AnsiString'

    String StringTrennen(String &source,char del,int pos)
    {
       int x=0,oldpos=1;
       while(x++<=source.size())
       {
          if(source[x]==del)
          {
             if(--pos) oldpos=x+1;
             else
               break;
          }
       }
       return source.substring(oldpos,x-oldpos);
    }
    


  • Du sollst ja auch string statt String verwenden (Gross/Klein-Schreibung beachten).
    String ist ein typedef auf AnsiString
    string ist aus der stl
    natürlich auch substr statt substring.
    Schau dir doch einfach mal die Hilfe zu string an (genauer gesagt zu basic_string).



  • Danke für die Hilfe jetzt funktioniert es:

    string StringTrennen(string &source,char del,int pos)
    {
       int x=0,oldpos=0;
       while(x++<=source.size())
       {
          if(source[x]==del)
          {
             if(--pos) oldpos=x+1;
             else
               break;
          }
       }
       return source.substr(oldpos,x-oldpos);      
    }
    


  • Habe noch ein kleines Problem wie kann ich das hinbekommen:

    string text = "123";
      int zahl;
      zahl = StrToInt(text)  ;
    

    Habe gehört, dass das irgenwie mit so etwas funktionieren sollte:
    AnsiString::c_str()

    aber wie



  • Wie gesagt lies dir die Hilfe zu basic_string durch.
    In diesem Fall hilft dir z.Bsp. zahl = StrToInt(text.c_str())
    oder du konvertierst deinen string mit einer anderen Routine in eine Zahl.
    Siehe dazu auch diesen Beitrag


Anmelden zum Antworten