Я посмотрел вокруг, но не могу найти ответ на свой вопрос. В программе предполагается поставить границы звездочек (*
) вокруг заголовка, но я получаю ошибку:
invalid conversion from 'char' to 'const char*' [-fpermissive]
а также ошибка
initializing argument 1 of 'std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]' [-fpermissive]|
#include <iostream>
#include <string>
using namespace std;
int main()
{
cout << "Please enter your name: " << endl;
string name;
cin >> name;
//Build the message that we intend to write
const string greeting = "Hello " + name + "!";
//Build the second and fourth line of the output
const string spaces = (greeting.size(), ' ');
const string second = "* " + spaces + " *";
//Build the first and fifth lines of the output
const string first = "* " + spaces + " *";
//Write all the output
cout << endl;
cout << first << endl;
cout << second << endl;
cout << "* " << greeting << " *" << endl;
cout << second << endl;
cout << first << endl;
return 0;
}
Это код для печати границы вокруг заголовка ^^ (относится к первой ошибке).
// TBD: DPG annotate
template<typename _CharT, typename _Traits, typename _Alloc>
*Error ->* basic_string<_CharT, _Traits, _Alloc>::
basic_string(const _CharT* __s, const _Alloc& __a)
: _M_dataplus(_S_construct(__s, __s ? __s + traits_type::length(__s) :
__s + npos, __a), __a)
{ }
Это код, относящийся ко второй ошибке ^^ (которая есть в строковой функции).
Я поместил оба куска кода, потому что я не знаю, что и чем вызвано.
Это:
const string spaces = (greeting.size(), ' ');
должно быть
const string spaces(greeting.size(), ' ');
С =
, он пытается инициализировать spaces
с результатом выражения (greeting.size(), ' ')
, Это выражение использует оператор запятой, который оценивает и отбрасывает greeting.size()
и дает ' '
как результат; так что это эквивалентно
const string spaces = ' ';
пытается инициализировать string
с одним символом, когда нет подходящего конструктора для этого.
Удаление =
, он инициализируется с использованием двух аргументов конструктора, давая строку, содержащую запрошенное количество пробелов.