Преобразование const char [] в String

183
12 мая 2022, 09:00

Допустим, есть такой код:

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. Но почему, если есть соответствующий для этого конструктор?

Answer 1

Нет такого конструктора. Есть конструктор для char*, а не для const char*. Замените

String(char s[])

на

String(const char s[])

C++ запрещает присваивание указателя на const указателю на не const. Если бы такое было разрешено, то можно было бы менять константные обьекты.

Answer 2

Потому что вы обещаете изменять в конструкторе передаваемую строку. А изменять литерал нельзя...

String(const char * s)

вас спасет. Понимаете, const в C++ применяют не только, и не столько потому, что это загадочно звучит и красиво смотрится... :)

READ ALSO
алгоритм с sort плохо работает

алгоритм с sort плохо работает

Написал алгоритм который должен сортировать числа в порядке возрастанияВвод через 1 строку

244
fstream в Visual studio

fstream в Visual studio

Пытаюсь я считать число из файла и сразу же вывести его в консоль, а выводиться неинициализированный участок памяти, а все данные из файла...

154
Поиск минимума в очереди C++

Поиск минимума в очереди C++

Реализую поиск минимума в очереди, но столкнулся с проблемой, что на больших массивах слишком долго работаетПодскажите, пожалуйста, можно...

178
Помощь с меткой

Помощь с меткой

Поставленная задача:

271