Werde ich verrückt, oder ist das ein Fehler mit dem Cygwin g ++ Compiler?Anhängen (uint8_t) 0x00 an eine std :: string verursacht mehrdeutigen Überlastungsfehler auf Cygwin?
Dies funktioniert:
std::string record;
record += (uint8_t)1;
Es ist auch total cool ist es, eine konstante Variable mit Wert mit Anhängen 0:
const uint8_t tZero = 0x00;
std::string record;
record += tZero;
jedoch diesen Code ausgeführt wird bewirkt, dass ein mehrdeutigen Betreiber Überlastung Fehler:
std::string record;
record += (uint8_t)0;
Die Kandidaten, die es zur Verfügung stellt, machen angesichts der expliziten Besetzung keinen Sinn, besonders Sinc e einer der Kandidaten scheint identisch zu sein, was in den Fehler gegeben:
sources/logger.cpp:55:20: error: ambiguous overload for `operator+=' (operand types are `std::string {aka std::basic_string<char>}' and `uint8_t {aka unsigned char}')
record += (const uint8_t)0;
note: candidates:
operator+=(const basic_string& __str)
operator+=(const _CharT* __s)
operator+=(_CharT __c)
Dieser Fehler in Visual Studio erscheint nicht, auch, kompiliert sie und fügt nur ein 0x00 Byte als ich erwartet.
Als Referenz verwende ich Zeichenfolgen als Puffer für binäre Protokolldaten. Es gibt wahrscheinlich einen besseren Container zu verwenden, aber in der Lage zu + = Bytes in ist zu nützlich, um nicht zu haben.
Hat cygwin einen Fehler mit seiner String-Implementierung, oder soll das einen Fehler verursachen, da es 0 ist? Es macht mir nichts aus, eine const-Variable zu verwenden, um den Fehler zu beheben, aber es wird komisch aussehen, da dieser Prozess mehrere Male durch den Code mit anderen Werten wiederholt wird.
Versuchen Sie es zu einem 'char' zu werfen? – kennytm
_ "vor allem, da einer der Kandidaten identisch zu dem ist, was in dem Fehler angegeben wird:" _ Welches? 'char' ist nicht identisch mit' unsigned char' –
@kennytm Es ist eine Vorliebe von mir, explizit anzugeben, welche Größe meine Variablen haben (ich mache viel Embedded-Entwicklung), weshalb ich nicht auf 'char' gewirkt habe. Laut der Antwort sind Sie richtig, und das würde funktionieren. @ Jonathan Ich nehme an, dass die Signiertheit bei der Auswahl des passenden Musters keine Rolle spielt. Ist das nicht der Fall? – DweebsUnited