Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
osl
0 / 0 / 0
Регистрация: 27.07.2016
Сообщений: 6
1

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

28.07.2016, 11:37. Просмотров 861. Ответов 3
Метки нет (Все метки)

Я недавно начал осваивать с++ с помощью учебника и там по ходу главы создается тренировочный класс String для работы со строками и в нем перегружается оператор индексирования для работы со строчками для просмотра и изменения отдельных символов строки,
C++
1
char & operator[](int i);
но так как он не был объявлен константным, то с константными строчками он работать не может, поэтому потом он еще раз перегружается для работы с константными объектами и может только выводить символы на экран,
C++
1
const char & operator[](int i )const;
а я решил проверить, достаточно ли только одного константного оператора для работы с объектами, т.е. сможет ли он работать еще и с не константными объектами (вроде как должен, но с его помощью должно быть нельзя менять строчки).

Но когда я написал класс,сначала только с одним не константным оператором то оказалось, во-первых, что он может работать и с константными строчками и менять их!), а потом и константному оператору тоже все по барабану. потом я убрал оба оператора индексирования и все равно смог обращаться к элементам строчек и менять их даже без перегруженных для класса операторов!!,
потом я уже не помню что я делал, но что-то привело к тому, что компилятор стал просить замены функции strcpy на srcpy_s , ну а я отключил предупреждения, потому что в конструкторе нормально был написан код и в итоге, (я тоже не помню как к этому пришел) я убрал #include <cstring>, оставив только <iostream> , но ему(компилятору) вообще по фигу! он все равно все нормально скомпилировал и запустил,
после этого я переписал все в другой проект и все, вообще все, стало прекрасно, как и ожидалось в самом начале, но проблема с cstring осталась, потому что все норм работает без ее включения в файл или так и должно быть? хд
вот код, который компилируется и работает у меня во втором проекте.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <iostream>
 
class String
{
public:
    String(const char *);
    ~String() { delete[] str; }
    int GetLength() const { return len; }
    
    const char & operator[](int) const;
private:
    char * str;
    int len;
};
String::String(const char * ptr)
{
    len = strlen(ptr);
    str = new char[len + 1];
    strcpy(str, ptr);
}
 
const char & String::operator[](int i) const
{
    return str[i];
}
int main()
{
    String cs("Yeah!");
    const String css("Buddy!");
    std::cout << cs.GetLength();
    std::cout << cs[2];
    //std::cin >> cs[2]; не компилируется, как и должно быть
    std::cout << cs[2];
    std::cout << css[1];
    //std::cin >> css[1]; не компилируется, как и должно быть
    return 0;
}
}
Добавлено через 10 минут
а и еще, в коде к sin и cout используется std:: а к функциям strlen и strcpy нет.

Добавлено через 22 секунды
cin*

Добавлено через 12 секунд
cin*

Добавлено через 1 минуту
C++
1
#include <iostream>
почему-то два раза скопировалось.

Добавлено через 1 минуту
и в конце фигурные скобки лишние откуда-то приплелись хд
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2016, 11:37
Ответы с готовыми решениями:

Неполадки с установкой библиотеки VkNet для использования API-функций
И так, я пишу программу на базе API функция Вк, у меня вижуал 2010 профессиональный, для...

Какие библиотеки нужно подключить для использования модального окна?
Добрый день Подскажите что нужно подключить для модального окна. Добавляю $modal в контроллер и...

Почему нужно переопределять метод, для использования ?
Всем привет есть такой код : class A { private: int var; public: A() {...

Преобразование char в int без использования функций библиотеки С
Собственно САБЖ имеется переменная char c='123'; требуется поместить ее в целочисленную...

Как сделать замену слова в строке без использования функций библиотеки string?
вводится строка =&gt; вводится слово, которое нужно заменить(если оно есть в строке)=&gt; вводится слово...

3
CheshireCat
Эксперт С++
2914 / 1263 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
28.07.2016, 11:50 2
Лучший ответ Сообщение было отмечено osl как решение

Решение

Это на каком компилере? Потому что GCC твой код не компиляет, как и ожидается (error: 'strlen' was not declared in this scope, и точно такое же ругательство про strcpy). А вот волшебное #include <cstring> все сразу ставит на свои места.

Такое бывает, если какой-либо заголовок (на твоем компилере скорее всего <iostream>) уже включает внутри себя еще один нужный заголовок (<cstring>). Однако закладываться на это нельзя, т.к. при переносе кода на другой компилятор грабли вылезут наружу. Нужно всегда явно подключать все нужные тебе заголовки.
1
Fulcrum_013
1547 / 1194 / 139
Регистрация: 14.12.2014
Сообщений: 10,218
Завершенные тесты: 3
28.07.2016, 12:39 3
Цитата Сообщение от osl Посмотреть сообщение
и еще, в коде к sin и cout используется std:: а к функциям strlen и strcpy нет
std это неймспейс и переменные cin и cout объявлены в скопе этого неймспейса. соответсвенно для обращения к ним нужно указывать неймспейс, или в начале добавить using namespace std; чтобы включить все из неймспейса std в глобальный скоп. strlen и strcpy объявлены в глобальном скопе, соответсвенно и указывать нэймспейс не надо.
1
HelicopterK52
789 / 219 / 32
Регистрация: 27.07.2016
Сообщений: 480
Завершенные тесты: 1
28.07.2016, 12:54 4
Цитата Сообщение от osl Посмотреть сообщение
а к функциям strlen и strcpy нет.
можете написать. Эти имена продублированы и в пространстве имен std
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2016, 12:54

про библиотеки в VS C++ (какие библиотеки нужны для функций 'cout' и 'cin')
какие библиотеки нужны для функций 'cout' и 'cin' ???

Почему у меня не работает нужно исправить
#include &lt;iostream.h&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;math.h&gt;...

Выбор библиотеки для использования в проекте
Гуру, подскажите, пли-и-из, имеет ли смысл использовать в МОЕМ проекте jQuery??? Пишу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru