2012-02-19 11 views
1

私はstd::stringunsigned charを連結しようとしていますが、それはcharためoperator+過負荷を持っていない`` unsigned char`を `std :: string`に連結するにはどうしたらいいですか?

#include <string> 

int main() 
{ 
    unsigned char a = 't'; 
    std::string s = "uoyriri"; 

    s = s + a; // error: no match for operator 
} 
+2

いい話。あなたは文書を見ましたか?利用可能なオーバーロードを確認するには?何を見つけましたか? –

+0

's + = static_cast (a);'を試してください。 –

+2

@Kerrek:もし、あなたがパラノイドで、 'a'の値がどこから来たのかわからないなら、' a> CHAR_MAX'を実行すると悪いことを防ぐ 's + = boost :: numeric_cast (a) 。 –

答えて

3

std::string「をoperator+が定義されていない」と言って私にエラーを与えます。あなたは、次の操作を実行できます。

s += 't'; 

しかし、一般的には、どのようなあなたはおそらくしたいことはstd::stringstreamです:

std::stringstream ss; 

ss << "uoyriri"; 
ss << a; 

ss.str(); // The resulting string 
+0

@セス、ルチアン:はい、今より明快になるように改訂されました。 –

+0

これはストリームのオーバーヘッドをお勧めしません。 –

+0

@ LightnessRacesinOrbit:この単純なケースではおそらくそうではありません。一般的には、はるかに柔軟性があります。 –

3

あなたがappend方法試みることができる:

s.append(1, static_cast<char>(a)); 
+0

変換が必要です。 –

+0

軌道上の@ Lightness Races:ありがとう、私は彼が実際に 'unsigned char'を持っていることを忘れていました。 – Tudor

0

std::string+=をオーバーロードしていますあなたはそれを行うために使用することができます:

s += a; 

これは動作するはずです。

+0

キャストすることなくキャストする –

+0

それは暗黙のうちだと思います。 – Nawaz

+0

@DavidHeffernanは私のために働きます。 @Nawazなぜ 'operator + =(char)'が存在するのだろうと思っていますが、 'operator +(char)'はしません... –

1

unsigned charcharにキャストし、オペレータ+=を使用してください。

+0

charにキャストしないでください。値を削除してください。unsigned charのchar値の127の範囲外の129のdecimal値がある場合、どうなりますか? –

+0

@Jackwelch: 'char'はあなたのシステムでは署名されていないかもしれません。 –

+0

@Jackwelchどのようにキャストするかによって異なります。あなたの入力がunsigned charなのはなぜですか? –

関連する問題