Конструктор с параметрами не копирует массив символов в поле (переменную) класса

Проблемы пока две:

  1. Ошибка при определении переменной "Не существует подходящего конструктора для преобразования из "const char[15]" в "String". Компилятор ругается на конструктор с параметром, даже если заменить функцию strcpy на цикл for, ничего не меняется. Пример из книги Р. Лафоре.

  2. Не работает функция strcpy. Но если добавить строку #define _CRT_SECURE_NO_WARNINGS то компилятор вроде проглатывает. Насколько я понял такие функции считаются небезопасными и компилятор на них ругается. А эта строка заставляет компилятор это игнорировать. Можно ли обойтись без этой строки?

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string.h>

using namespace std;
////////////////////////////////////
class String
{
    private:
        enum { SZ = 80 };
        char str[SZ];
    public:
        String()
        {
            strcpy(str, "");
        }
        String(char s[])
        {
            strcpy(str, s);
        }
        void display()
        {
            cout << str;
        }
        String operator+(String ss) const
        {
            String temp;
            if (strlen(str) + strlen(ss.str) < SZ)
            {
                strcpy(temp.str, str);
                strcat(temp.str, ss.str);
            }
            else
            {
                cout << "Переполнение!!!" << endl;
                exit(1);
            }
            return temp;
        }
};
////////////////////////////////////
int main()
{
    setlocale(LC_ALL, "Russian");

    String s1 = "С Рождеством! ";
    String s2 = "С Новым годом!";
    String s3;

    s1.display();
    s2.display();
    s3.display();

    s3 = s1 + s2;

    s1.display();
    s3.display();
    cout << endl << endl;
}

Ответы (1 шт):

Автор решения: Harry

Попробуйте

String(const char s[])

По второму вопросу - можно отключить это предупреждение

#pragma warning( disable : 4996 )

но с

#define _CRT_SECURE_NO_WARNINGS 

все же корректнее (или использовать безопасные функции).

→ Ссылка