Klassenproblem
-
Hallo,
bin gerade dabei meine Facharbeit zu schreiben und verwende hier das erste mal wirklich Klassen. Und schon kommt das Problem. Der Anfang meiner Klasse sieht so aus:
class subnetz { private: DWORD dwAdresse; public: long lNrOfIPs, lNrOfHosts, lNrOfSubnets; // hier kommt noch mehr... }
Wenn ich jetzt aus meinem Programm heraus versuche, auf die Variablen lNrOfIPs, lNrOfHosts und lNrOfSubnets zugreifen will, kommt vom Borland Compiler immer die Fehlermeldung:
[C++ Fehler] main.cpp(480): E2280 Elementbezeichner erwartet
und der Cursor wird auf diese Zeilen gesetzt, wo ich die Variable abfragen will:
sprintf(EditMessage1,"%d",subnetzmaske.lNrOfHosts); sprintf(EditMessage2,"%d",subnetzmaske.lNrOfHosts); sprintf(EditMessage3,"%d",subnetzmaske.lNrOfHosts);
Auf die anderen Variablen kann ich so auch ganz normal zugreifen. Nur bei diesen 3 long-Variablen nicht. Die anderen Variablen sind vom Typ DWORD, BYTE und BOOLEAN und bei denen gibts keine Fehlermeldung wenn ich die aufrufe. Vielleicht bin ich aber auch einfach nur blind und sehs nicht
Bitte helft mir, brauche das ganz dringend.
die_klasse
-
ohne jetzt zu wissen welche parameter typen sprintf mag.
aber vielleicht hilft dir das ein wenig
%d Ganze Zahl vom Typ int
%hd Ganze Zahl vom Typ short
%ld Ganze Zahl vom Typ long <--- wichtig, könnte klappen
-
sicher das das %d richtig ist?
Edit: Newkid war schneller
-
Was soll ich denn sonst nehmen?
%ld funktioniert auch nicht
-
wie gesagt ich kenne den 2ten parameter nicht
hast du mal sowas versucht ob das wenigstens geht
long allalalong = subnetzmaske.lNrOfHosts; // was zeigt der debugger hier an?
-
Dasselbe wie bei den anderen.
Hier ist die Syntax von sprintf, wenn du den zweiten Parameter nicht kennst.
sprintf(const char *target_string, const char *format, ...);
-
sprintf(ziel, "%d", zahl2);
so sieht die funktion aus! ziel ist ein string und zahl2 ein int!
-
was ist den EditMessage1? ein char array? oder ein string? also ich kenne sprintf() von C! und ich vermute das sprintf() nicht mit strings umgehen kann
-
char EditMessage1[16]; // also char-Array
-
donzero schrieb:
was ist den EditMessage1? ein char array? oder ein string? also ich kenne sprintf() von C! und ich vermute das sprintf() nicht mit strings umgehen kann
sorry check ich jetzt nicht. erst sagt du
sprintf(ziel, "%d", zahl2); // ziel ist ein string und zahl2 ein int!
dann sagst du und ich vermute das sprintf() nicht mit strings umgehen kann
EditMessage1 hört sich nach eine BOX an, oder?
bist du sicher das man die box so drauf anspricht ( falls eine editbox )
mit
sprintf ( BOX_ID, string ); // ???kenne mich nicht mit borland aus.
-
Nö, ist keine EditBox. Ganz normales char-Array.
Ich hab das jetzt einfach anders gelöst. Hab mir einfach in die Klasse drei Funktionen geschrieben die mir das zurückgeben. Aber nochmal danke an euch.
-
ja ich mein char array sry das ich erst string geschrieben habe!
char EditMessage1[16]; long int longlong = 10020; sprintf(EditMessage1,"%d",longlong); cout << EditMessage1 << endl;
das geht bei mir ... ich denke ma das die datentypen bei dir die gleichen sein sollten!
//Edit .. an gut wenn du es schon hast
-
aha bissle gegoogelt und siehe da
sprintf formatiert Daten zu Gesamtstring
sprintf brauchbar zum Formatieren und
anschließenden Ausgeben in GUI-Elementhast du ein gui element?
Also für die Ausgabe in einen neuen String (char-Array) kannst du sprintf verwenden. Dafür musst du aber erst mal Platz für den neuen String bereitstellen, also länge des alten String + 3 Zeichen Checksumme + '\0'
Wenn du das hast. benutzt du sprintf wie folgt:
char message[]="GPGLL,5057.970,N,00146.110,E,142451,A"; // alte Message
char* newMessage; //hier soll die neue Message rein//schreibt die alte nachricht + '' + Checksumme in HEX (Großbuchstaben) in newMessage
sprintf(newMessage, "%s%02X", message, checkSumme);zur Erklärung: sprintf arbeitet wie printf und schreibt die formatierte Ausgabe in einen char-Puffer. %s ist der Platzhalter für deine originale Message dann der '*' und %02X für die Checksumme als Hexwert (immer 2 Stellen und Großbuschstaben)
aha maybe hilft dir das
http://www.cplusplus.com/ref/cstdio/sprintf.html
fazit:
maybe passen das long nicht in ein char c[16] ?
[quote]
-
Ein C++-Programmierer würde stringstream verwenden.