Вы пытаетесь добавить два указателя вместе, поэтому он не будет компилироваться. Не забывайте, что указатель является адресом памяти, оператор + не будет вызываться в вашем примере - вам придется разыменовать указатель, но я бы не рекомендовал этот шаблон в этом случае. Я бы посоветовал вам прочитать немного больше об указателях и ссылках: -)
Будьте очень осторожны при удалении памяти. Это плохая практика - удалять память вне контекста, в котором она была выделена - это рецепт ошибок. Кроме того, если вы разместите в стеке перед вызовом 'delete str', ваше приложение, скорее всего, аварийно завершит работу.
Для работы со строками я бы очень рекомендовал передавать по константной ссылке. Таким образом, он будет иметь дело с распределением памяти для вас, так как вы можете передать std :: string по значению, и он будет внутренне выполнять выделение памяти по мере необходимости ...
Еще пара моментов.
В языках C мы обычно считаем «0», поэтому я бы изменил ваш цикл for
В правильном приложении у меня есть некоторые отладочные утверждения для ваших входных параметров: то есть вы должны утверждать, что num_times равен '> 0'
Следующий код компилируется и выполняется с результатом "barbarbar" ...
Ура и удачи,
Jon
#include <string>
#include <iostream>
using namespace std;
static string str_repeat(const string& str, int count)
{
string returnData;
for (int n = 0; n < count; n++)
{
returnData.append(str);
}
return returnData;
}
int main(int argc, char* argv[])
{
string foo = "bar";
string duplicated = str_repeat(foo, 3);
cout << duplicated;
return 0;
}