Чтобы понять этот вопрос, вы должны знать, что в C ++ строковые литералы, такие как "lw $"
, обрабатываются как const char[]
как унаследованные от языка Си.Однако это означает, что вы получаете только те операторы, которые определены для массивов, или в этом случае массив-деградирует до указателя.
Итак, что происходит, если у вас есть строковый литерал, а затем добавляется целое число кэто, создавая новый указатель.Затем вы пытаетесь добавить другой строковый литерал, который снова ухудшается до char*
.Вы не можете добавить два указателя вместе, что приведет к появлению ошибки, которую вы видите.
Вы пытаетесь отформатировать целые числа в строковый формат с некоторым разделителем текста.В C ++ канонический способ сделать это с помощью строковых потоков:
#include <sstream>
string lw(int a, int b)
{
std::ostringstream os;
os << "lw $" << a << "0($" << b << ")\n";
return os.str();
}