Допустим, есть такой код:
class String
{
private:
enum {SZ = 80};
char str[SZ];
public:
String()
{ strcpy(str, ""); }
String(char s[])
{ strcpy(str, s); }
void display() const
{ cout << str; }
void operator+=(String ss)
{
if (strlen(str) + strlen(ss.str) < SZ)
strcat(str, ss.str);
else
cout << "Overflow!" << endl; exit(1);
}
};
int main()
{
String s1("str1 ");
String s2("str2");
}
На 2 операции в main компилятор жалуется, мол, нельзя преобразовать const char[10] в String. Но почему, если есть соответствующий для этого конструктор?
Нет такого конструктора. Есть конструктор для char*
, а не для const char*
.
Замените
String(char s[])
на
String(const char s[])
C++ запрещает присваивание указателя на const
указателю на не const
. Если бы такое было разрешено, то можно было бы менять константные обьекты.
Потому что вы обещаете изменять в конструкторе передаваемую строку. А изменять литерал нельзя...
String(const char * s)
вас спасет. Понимаете, const
в C++ применяют не только, и не столько потому, что это загадочно звучит и красиво смотрится... :)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Написал алгоритм который должен сортировать числа в порядке возрастанияВвод через 1 строку
Пытаюсь я считать число из файла и сразу же вывести его в консоль, а выводиться неинициализированный участок памяти, а все данные из файла...
Реализую поиск минимума в очереди, но столкнулся с проблемой, что на больших массивах слишком долго работаетПодскажите, пожалуйста, можно...