Hallo Forum, ich habe ein Problem mit Qt: ich versuche einem QByteArray eine 0x0 anzuhängen: qba.append(4); qba.append("text"); qba.append(0); qba.append(0x0); die ersten zwei Aufrufe funktionieren wie gewünscht, die letzten nicht: error: call of overloaded ‘append(int)’ is ambiguous es werden mir dann noch alternativen vorgeschlagen: char, const char*, const QByteArray&, const QString& ich denke, ich brauche hier die stringterminierende Null. Das Script zu dem ich das Program schreibe sagt "Die Sequenz wird durch ein Längenfeld gebildet, das dem Text vorangestellt wird, der Abschluß wird durch ein leeres Textfeld gebildet, dem die 0x0 vorangestellt ist", das Beispiel sieht entsprechend so aus: 0x4Text0x0. Der erste Teil läßt sich erzeugen wenn ich qba.append(4); qba.append("text"); nehme, aber egal wie ich mich anstelle, ich bekomme keine neue Null dazu, das einzige was hilft ist qba.resize(qba.size()+1) ... aber das kann es doch nicht sein. Was muss ich tun? Mit freundlichen Grüßen Roland
Hi, Roland schrieb: > ich versuche einem QByteArray eine 0x0 anzuhängen: Die Funktion "append" sollte den String schon Null terminieren. Aber wenn du noch ne extra Null brauchst, wieso nicht so:
1 | qba.append("\0"); |
Gruß
Roland schrieb: > error: call of overloaded ‘append(int)’ is ambiguous > es werden mir dann noch alternativen vorgeschlagen: char, const char*, > const QByteArray&, const QString& Zu deutsch: Es gibt keine Funktion append, die direkt mit einem int umgehen kann. Der übergebene Wert muß also in einen anderen Typ konvertiert werden. Das kann der Compiler nicht implizit tun, da er mehere Alternativen dafür hat. Du muß ihm daher durch einen Cast explizit sagen, welche der angegebenen Alternativen er nutzen soll.
Genauer: Es gibt zwar eine überladene Variante für int, aber der Wert "0" ist nicht eindeutig, da er sowohl als int als auch als "(char*)0" bzw. NULL zu interpretiert werden kann. Das besagt übrigens auch die Fehlermeldung. Im neueren C++-Standard gibt es "nullptr", der diese Mehrdeutigkeit auflöst.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.