2012-06-06 4 views
0

Я использую Borland C++ Builder 6, чтобы попытаться выполнить некоторую простую конкатенацию строк. Тем не менее, я столкнулся с тем, что, по моему мнению, является интересной проблемой.Borland C++ Builder 6 и конкатенация строк

Все, что я могу найти в Интернете говорится, что я должен быть в состоянии сделать что-то же просто, как это:

String word = "a" + "b" + "c"; 

Однако, когда я пытаюсь скомпилировать этот код, я получаю сообщение «Invalid дополнения указателя» ошибка. Я мог бы дойти до назначения каждой части своей переменной и добавления каждого из них для получения желаемого результата. Тем не менее, я думаю, что это лишнее, учитывая, насколько просто пример.

Единственный способ, которым я был в состоянии получить что-то подобное описанному выше для работы по желанию, делая это:

String a = ""; 
String word = a + "a" + "b" + "c"; 

Моего вопрос заключается в следующем: почему бы второй примере работа просто отлично, но не первый?

ответ

2

Причина заключается в том, что тип "a" является char* (т.е .: указателя на голец), что означает, когда вы пишете

"a" + "b" 

вы пытаетесь добавить указатели вместе, что не допускаются.

При создании String типа, то operator+ перегружен так

String a = ""; 
a + "b" 

добавляет указатель на голец к String, который имеет свою собственную дефиницию конкатенации.

+0

Я вижу. Поэтому в принципе, если бы я хотел добавить строки таким образом, я должен просто использовать второй пример, предоставленный там. Хотя я рассматриваю его как странное поведение (я обычно программист на C#) –

+1

@ hawk4031 - Правильно. Вы также можете использовать анонимный объект String: 'String word = String (" a ") +" b ";' – Attila

0

Я не совсем уверен, но это, вероятно, из-за аргументов. «a» в первой строке - char*, поэтому добавление других строк по-прежнему приводит к результату char*, и невозможно напрямую назначить его o String. Второй случай показывает, что если первый аргумент имеет тип String, все результаты также являются строками, поэтому назначение возможно.

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