2012-02-19 4 views
1

Я пытаюсь объединить в unsigned char к std::string, но это дает мне ошибку говоря «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

Хорошая история. Вы посмотрели документацию? Чтобы узнать, какие перегрузки доступны _are_? Что вы узнали? –

+0

Попробуйте 's + = static_cast (a);'. –

+2

@ Kerrek: или если вы параноик и не знаете, откуда берется значение 'a', попробуйте' s + = boost :: numeric_cast (a) ', что предотвратит плохость, когда' a> CHAR_MAX' , –

ответ

3

std::string не имеет operator+ перегрузки для char. Вы можете сделать следующее:

s += 't'; 

Но в общем, то, что вы, вероятно, хотите это std::stringstream:

std::stringstream ss; 

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

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

@Seth, Luchian: Да, переформулировано, чтобы быть яснее/лучше сейчас. –

+0

Я бы не рекомендовал накладные расходы для этого. –

+0

@LightnessRacesinOrbit: Возможно, не в этом простом случае. В целом, однако, это намного более гибко. –

3

Вы можете попробовать append метод:

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

Вам все еще нужно преобразование. –

+0

@ Планы на орбите: Спасибо, я пропустил, что на самом деле у него 'unsigned char'. – Tudor

0

std::string перегрузил += которые вы можете использовать для этого:

s += a; 

Это должно сработать.

+0

не без литого в char –

+0

Это неявное, я думаю. – Nawaz

+0

@ Давид Хеффернан работает для меня. @Nawaz Мне интересно, почему 'operator + = (char)' существует, но 'operator + (char)' does not ... –

1

Включить unsigned char в должность char и использовать оператора +=.

+0

wont casting to char удаляет значение. Предположим, что unsigned char имеет десятичное значение 129, которое находится за пределами диапазона 127, используемого char, что произойдет? –

+0

@ Jackwelch: 'char' может быть неподписанным в вашей системе. –

+0

@Jackwelch Зависит от того, как вы его применяете. Почему ваш входной символ без знака? –

Смежные вопросы