Замечания:
#include <cstring>
должен ввести std :: strcpy ().
using namespace std;
(как написано в medico.h) вводит любые идентификаторы из std::
в глобальное пространство имен.
Помимо того, что using namespace std;
является несколько неуклюжим, когда приложение становится больше (поскольку оно вводит чертовски много идентификаторов в глобальное пространство имен), и что вы не должны никогда использовать using
в заголовочный файл (см. ниже!), using namespace
не влияет на идентификаторы, введенные после оператора.
(using namespace std
записывается в заголовке, который включен в medico.cpp, но #include <cstring>
приходит после этого.)
Мой совет: Поместите using namespace std;
в medico.cpp, после любого включения и используйте явное std::
в medico.h.
strcmpi()
не является стандартной функцией вообще; будучи определенным в Windows, вы должны по-разному решать сравнение без учета регистра в Linux.
(В общих чертах я бы хотел указать этот ответ в отношении «правильной» обработки строк в C и C ++, которая учитывает Unicode, как и каждое приложение. Резюме: Стандарт не может правильно обрабатывать эти вещи; делать использовать ICU .)
warning: deprecated conversion from string constant to ‘char*’
«Строковая константа» - это когда вы пишете строковый литерал (например, "Hello"
) в своем коде. Его тип - const char[]
, то есть массив из константы символов (так как вы не можете изменить символы). Вы можете назначить массив указателю, но назначение char *
, то есть удаление квалификатора const
, генерирует предупреждение, которое вы видите.
OT уточнение: using
в заголовочном файле изменяет видимость идентификаторов для всех, включая этот заголовок, что обычно не то, чего хочет пользователь вашего заголовочного файла. Например, я мог бы просто использовать std::string
и самописный ::string
просто в своем коде, , если я не включу ваш medico.h , потому что тогда два класса столкнутся.
Не используйте using
в заголовочных файлах.