Typumwandlung bei Array !
-
Hallo zusammen ;),
wisst ihr wie man Arrays castet also z.b. Int in String oder noch besser Int in CString ?
Vielen Dank für eure Mühe
ShadowEater
-
itoa
-
ShadowEater schrieb:
Hallo zusammen ;),
wisst ihr wie man Arrays castet also z.b. Int in String oder noch besser Int in CString ?
ShadowEaterint a[100]; char* bptr = (char*)a;Zeiger casten und als char-Array ansprechen zb.
bptr[399] = '\0';
-
Ich bin mir nicht sicher, was mit Arrays gemeint ist, aber Casten zwischen Int und String geht unter C++ mit folgenden Funktionen:
template <typename To, typename From> bool try_lexical_cast(From const& from, To* to) { std::stringstream interpreter; return interpreter << from and interpreter >> *to and interpreter.eof(); } struct invalid_cast : std::logic_error { invalid_cast() : std::logic_error("Invalid cast.") { } }; template <typename To, typename From> To lexical_cast(From const& from) { To ret; if (not try_lexical_cast(from, &ret)) throw invalid_cast(); return ret; }Beispiel:
cout << lexical_cast<int>("1234") << endl; // "1234" int x; cout << boolalpha << try_lexical_cast("12a3", &x) << endl; // "false"Auf Arrays kann man das ganze auch anwenden, indem man 'std::transform' nimmt.
-
Oh Mann,
d*a*n+k+e willy !!!
Hast Du in diesem Zusammenh. vllt ne Lösung dafür:http://www.c-plusplus.net/forum/viewtopic-var-t-is-186374.html
?????
Danke für Deine Mühe
Gruss
ShadowEater
-
ShadowEater schrieb:
Hast Du in diesem Zusammenh. vllt ne Lösung dafür:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-186374.html
Zwei Dinge:
- Variablen müssen deklariert werden, *bevor* man sie benutzt.
- Du kannst nicht einfach Zahlen in einen String reinschreiben. Verwende die von mir gepostete Lösung.CString itsResult[100]; // !!! 100! NICHT 101! Wir sind hier nicht in VB. for (int i = 0; i<=10; i++) { for (int j = 0; j <=10; j++) { itsResult[i * j] = lexical_cast<CString>(i * j); } }
-
Ach so, noch etwas, das klappt so nicht. Du gibst in Der Funktion 'Calculate' einen Zeiger auf ein Objekt innerhalb der Funktion zurück. Nach Beenden der Funktion wird dieses Objekt aber zerstört, daher zeigt der Zeiger ins Nirvana.
Verwende die C++-'std::vector'-Klasse statt C-Arrays, dann hast Du das Problem nicht.
-
Danke für die Antwort ;),
ich habe den Code eingefügt und erhalte noch 2 Fehlermeldungen :
1.'lexical_cast' : nichtdeklarierter Bezeichner
2.Ungültige Verwendung dieses Typs als AusdruckAch so, noch etwas, das klappt so nicht. Du gibst in Der Funktion 'Calculate' einen Zeiger auf ein Objekt innerhalb der Funktion zurück. Nach Beenden der Funktion wird dieses Objekt aber zerstört, daher zeigt der Zeiger ins Nirvana.
Hmmm das kann ich mir vorstellen dass das nicht klappt, gibt es eine möglichkeit Arrays weiterzuverwenden (statische Zeiger oder so etwas ?)

ShadowEater
-
ShadowEater schrieb:
1.'lexical_cast' : nichtdeklarierter Bezeichner
2.Ungültige Verwendung dieses Typs als AusdruckJa, Du musst auch schon den Code für 'lexical_cast', den ich vorher gepostet habe, einfügen. Und zwar so, dass er in der Funktion gefunden wird. Also *davor*. Am besten in einem eigenen Header, den Du dann einfügst.
Hmmm das kann ich mir vorstellen dass das nicht klappt, gibt es eine möglichkeit Arrays weiterzuverwenden (statische Zeiger oder so etwas ?)
Ja, es ginge in der Tat, wenn Du das Array in der Funktion als 'static' deklarierst. In diesem Fall könnte das sogar sinnvoll sein. Generell rate ich aber trotzdem von der Verwendung von Zeigern ab, wo es sich vermeiden lässt.
-
Hmmmm,
dann wäre doch das geschickteste sich die Ergebnisse auszurechnen und sie nicht in ein int Array zu schreiben sondern gleich nach der Berechnung einfach zu casten und gleich in ein CString Array einzulesen oder ?
ShadowEater
-
Mensch jung, mach das doch ordentlich ! Tststs !
Du könntest
void func( type** pptr )
{*ptr = 0xXYZ;
return;
}int main(){
type *p_ptr;
func( &p_ptr );
...
es so machen. MFG
-
Wenn ich das so mache krieg ich nur noch einen Fehler :
class CCalculate { private: public: CCalculate (){}; ~CCalculate (){}; int itsResult [100]; static CString ergebnis [100]; CString strTausche; int iTausche; CString berechne(); }; CString CCalculate::berechne() { for (int i = 0; i<=10; i++) { for (int j = 0; j <=10; j++) { itsResult[i * j] = (i * j); } } for (int k = 0; k <= 100; k++) { itsResult[k] = iTausche; strTausche = (CString)iTausche; ergebnis[k] = strTausche; } return *ergebnis; }error C2679: Binaerer Operator '=' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class CString' akzeptiert (oder keine geeignete Konvertierung möglich
mfg
ShadowEater
-
Hm, mit MFC arbeite ich eigendlich nicht, aber vielleicht hilft dir das:
class CCalculate { private: public: CCalculate (){}; ~CCalculate (){}; int itsResult[100]; CString ergebnis[100]; void berechne(); }; void CCalculate::berechne() { char tmp[100]; for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { itsResult[i * j] = i * j; //_itow_s(i*j, tmp, 100, 10);// die wchar_t -Variante _itoa_s(i*j, tmp, 100, 10); ergebnis[i*j] += tmp; } } }