Ошибка c ++: нет соответствующей функции для вызова 'std :: __ cxx11 :: basic_string <char>:: append <int>(int, int)' - PullRequest
0 голосов
/ 21 марта 2020

Попытка запустить это:

// appending to string
#include <iostream>
#include <string>

int
main()
{
  std::string str;
  std::string str2 = "Writing ";
  std::string str3 = "print 10 and then 5 more";
  // used in the same order as described above:
  str.append(str2);                         // "Writing "
  str.append(str3, 6, 3);                   // "10 "
  str.append("dots are cool", 5);           // "dots "
  str.append("here: ");                     // "here: "
  str.append(10u, '.');                     // ".........."
  str.append(str3.begin() + 8, str3.end()); // " and then 5 more"
  str.append<int>(5, 0x2E);                 // "....."

  std::cout << str << '\n';
  return 0;
}

Но с ошибкой на str.append (5,0x2E):

ошибка: нет соответствующей функции для вызова 'std :: __ cxx11: : basic_string :: append (int, int) '

Использование VS Code 1.43.1, работающего на Ubuntu 19.10, g cc версия 9.2.1 20191008 (Ubuntu 9.2.1-9ubuntu2).

Я пытался запустить код в Code :: Blocks 16.01 IDE и windows, но имел ту же ошибку.

Ответы [ 4 ]

0 голосов
/ 21 марта 2020

Вам просто не нужна часть <int>. str.append(5, 0x2E); отлично компилируется.

0 голосов
/ 21 марта 2020

Существует без варианта из std::string::append(), который принимает два целых числа - вы должны сделать второй параметр символом, поскольку - это вариант, который принимает целое число и символ.

Кроме того, используя <int>, вы изменяете шаблонный тип символа charT на целое число, а не на символ, что, вероятно, не будет работать так, как вы ожидаете. std::string обычно определяется как std::basic_string<char>, поэтому добавление с .append<int> в лучшем случае будет иметь странные последствия для базовой памяти.

Поскольку вы хотите добавить еще пять . символов, Я не уверен, почему ты просто не сделал бы:

str.append(5, '.');
0 голосов
/ 21 марта 2020

Если возникают проблемы со стандартной библиотекой шаблонов, вы всегда можете взглянуть на ссылку на c ++ для функции, которую вы используете: http://www.cplusplus.com/reference/string/string/append/

В этом случае нет никакой причины указывать после вашего добавления: при этом оба аргумента интерпретируются как int, а вы хотите, чтобы второй интерпретировался как символ. Вы можете просто достичь этого, выполнив str.append(5,0x2E);. Ваш компилятор будет искать ближайшую подходящую функцию, которая является string& append (size_t n, char c);, и неявно преобразовывать второй аргумент в символ.

0 голосов
/ 21 марта 2020

Вам необходимо преобразовать 0x2E (целое число) в символ: char(0x2E) сначала.

str.append<int>(5,char(0x2E));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...