Фактическая проблема состояла в том, что конкатенация строковых литералов с +
не удалась в C ++:
string s;
s += "Hello world, " + "nice to see you, " + "or not.";
Приведенный выше код выдает ошибку.
В C ++ (также в C) вы объединяете строковые литералы, просто помещая их рядом друг с другом:
string s0 = "Hello world, " "nice to see you, " "or not.";
string s1 = "Hello world, " /*same*/ "nice to see you, " /*result*/ "or not.";
string s2 =
"Hello world, " /*line breaks in source code as well as*/
"nice to see you, " /*comments don't matter*/
"or not.";
Это имеет смысл, если вы генерируете код в макросах:
#define TRACE(arg) cout << #arg ":" << (arg) << endl;
... простой макрос, который можно использовать вот так
int a = 5;
TRACE(a)
a += 7;
TRACE(a)
TRACE(a+7)
TRACE(17*11)
( live демо ... )
или, если вы настаиваете на использовании +
для строковых литералов (как уже предложено underscore_d ):
string s = string("Hello world, ")+"nice to see you, "+"or not.";
Другое решение объединяет строку и const char*
для каждого этапа объединения
string s;
s += "Hello world, "
s += "nice to see you, "
s += "or not.";