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); }; #endifDabei 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]
-
das habe ich ja in meiner Funktion StringTrennen benutzt.
-
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