Строковая операция - добавление строки к себе - PullRequest
0 голосов
/ 09 декабря 2011

В моем коде есть эта часть, которая выдает ошибку

for(int i=0;i<100;i++)
{
s=s+",";

cout <<"string length is now "<<s.length<<endl;
}

Я просто добавляю одну и ту же строку снова и снова 100 раз к себе. ошибка:

строка 23: Ошибка: получение адреса связанной функции std :: basic_string, std :: allocator> :: length () const.

Кто-нибудь может мне сказать, что я здесь не так делаю?

Ответы [ 3 ]

2 голосов
/ 09 декабря 2011

Это должно быть s.length(), а не s.length:

cout <<"string length is now "<< s.length() <<endl;

Обратите внимание, что std::string::length() - это функция, а не переменная.

Я предпочитаю .size(), потому что этосоответствует всем другим контейнерам.Другие контейнеры не имеют .length() функции-члена;только std::string имеет эту функцию вместе с .size(), которая возвращает то же значение.

Итак, если std::string имеет .size(), то почему делает исключение и использует .length()?Почему бы не использовать .size() постоянно?Я бы предложил вам использовать .size() вместо .length():

cout <<"string length is now "<< s.size() <<endl;
1 голос
/ 09 декабря 2011

length является функцией , не является переменной-членом. Вам нужно:

cout << "string length is now " << s.length() << endl;

Ошибка («Получение адреса ...») вызвана тем, что s.length является адресом функции length для типа s, тогда как вы хотите вызвать указанной функции и используйте возвращаемое значение.

0 голосов
/ 09 декабря 2011

Нет такой вещи, как string::length публично доступной для вызова. Попробуйте это:

s.size()

OR

s.length()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...