13 / 13 / 2
Регистрация: 26.02.2013
Сообщений: 285
|
||||||||||||||||
1 | ||||||||||||||||
CodeBlocks ругается при использовании функции copy()27.03.2015, 02:30. Показов 1672. Ответов 17
Метки нет (Все метки)
CodeBlocks почему-то ругается когда я использую функцию copy() в следующем контексте:
e:\programs\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_a lgobase.h|376|error: no type named 'value_type' in 'struct std::iterator_traits<std::basic_string<char> >'| И вообще ругается, когда я в дебаггере проверяю переменную s и не показывает её значение. Говорит мол, программа получила сигнал SIGSEGV, Segmentation fault. И (во время какой-то из попыток) оно показало значения переменных s и tmp. Они оказались одинаковы, хотя я пробовал не инициализировать tmp, или инициализировать её при создании:
0
|
27.03.2015, 02:30 | |
Ответы с готовыми решениями:
17
Права доступа при использовании функции copy() Visual Studio ругается при использовании CImage Почему ругается gcc при использовании inline + setjmp() ? Почему компилятор ругается на то, что класс не объявлен при использовании оператора если? |
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
|
||||||
27.03.2015, 03:24 | 2 | |||||
А так?
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|||||||||||||||||||||
27.03.2015, 14:04 | 3 | ||||||||||||||||||||
А так, он наверняка поймет тебя буквально и получит крэш.
Тут нужно сказать, что память для строки в tmp уже должна быть (быть достаточного размера), чтобы это работало.
Или, можно, например, использовать std::back_inserter
Автор, почему нельзя написать так?
0
|
13 / 13 / 2
Регистрация: 26.02.2013
Сообщений: 285
|
|
27.03.2015, 15:01 [ТС] | 4 |
К сожалению, как минимум потому что во время отладки, когда я хочу проверить значение s или tmp, то либо компилятор выбивает ошибку, либо говорит мол, эти переменные одинаковы (и при изменении одной из них, изменяется значение в другой), как было написано в первом сообщении.
Добавлено через 4 минуты Так вылетает следующее: |error: invalid conversion from 'std::basic_string<char>::size_type {aka unsigned int}' to 'const char*' [-fpermissive]| e:\programs\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\basic _string.h|487|error: initializing argument 1 of 'std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]' [-fpermissive]|
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
27.03.2015, 16:10 | 6 | |||||
не взлетит.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||||||||||
27.03.2015, 16:17 | 8 | |||||||||||||||
1.
вы и так будете видеть в отладчике и s и tmp и судя по вашему юзкейсу эти переменные по итогу должны содержать одинаковые значения. 2. при изменении одной, другая не измениться Это легко проверить, вы можете записать вот так:
не добавлять, а копировать поверх старых Добавлено через 12 секунд не эффективно.
0
|
13 / 13 / 2
Регистрация: 26.02.2013
Сообщений: 285
|
|
27.03.2015, 16:32 [ТС] | 9 |
Нет. Сначала из конца s удаляются некоторые символы. Но потом они будут нужны, поэтому мне надо просто запомнить значение s, чтобы потом его сохранить для дальнейшей обработки, изменения и вернуть надо изменённое значение, поэтому такое объявление
не подойдёт. Я использовал tmp.push_back() и у меня изменялось значение s, что мне показалось довольно таки странным.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||||||||||
27.03.2015, 16:44 | 10 | |||||||||||||||
Сообщение было отмечено Мизантроп_Лол как решение
Решение
тогда принимайте по ссылке, а не по значению:
поскольку, s - ссылка на объект, состояние которого нельзя изменять. и компилятор проследит за этим. все эти ваши copy вам не нужны. ------------------------------------------ мне не понятно, зачем вы показали мне картинку отладчика но судя по картинке, у вас там сейчас:
уберите copy, она избыточна.
1
|
13 / 13 / 2
Регистрация: 26.02.2013
Сообщений: 285
|
||||||
27.03.2015, 17:06 [ТС] | 11 | |||||
Так мне-то как раз и надо будет его изменить в конце, так что, если я не ошибаюсь, мне надо писать так:
Показывало значения tmp и s равными ещё до объявления tmp. А раньше показывало так же и после объявления и даже после инициализации. Сейчас, после того как исправил вышеуказанную строку - всё отлично работает, спасибо) Я тогда за те строки забыл немного просто)
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
27.03.2015, 17:12 | 12 |
ага.
вы сами понимаете насколько бредово это звучит? до объявления tmp, она ещё вообще не существует. -------------------------------------------------- есть предположение, что вы дебажете release версию сборки. в режиме оптимизаций компилятор может менять код, как небо и земля. общая логика, разумеется сохраняется. вот только отладчик в этих условиях начинает показывать всякую фигню.
0
|
13 / 13 / 2
Регистрация: 26.02.2013
Сообщений: 285
|
|
27.03.2015, 17:19 [ТС] | 13 |
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
27.03.2015, 18:18 | 14 |
0
|
13 / 13 / 2
Регистрация: 26.02.2013
Сообщений: 285
|
|
27.03.2015, 18:21 [ТС] | 15 |
hoggy, качал полный набор с офф сайта вроде как)
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
27.03.2015, 18:24 | 16 |
это не важно.
важно понимать: что бы не показывал отладчик, но в точке, где переменная ещё не существует, значение которое показывает отладчик не имеет смысла. если вас интересует значение tmp, то рассматривайте его только в тех моментах, когда она уже реально существует. прочие моменты - игнорируйте.
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
27.03.2015, 18:45 | 17 |
0
|
13 / 13 / 2
Регистрация: 26.02.2013
Сообщений: 285
|
|
27.03.2015, 18:48 [ТС] | 18 |
hoggy, ну это я понимаю. Я же писал ещё, что значения были странными и в других частях программы, уже после объявления. Впрочем, это уже не важно. Уже всё отлично)
0
|
27.03.2015, 18:48 | |
27.03.2015, 18:48 | |
Помогаю со студенческими работами здесь
18
функция copy() ругается и не копирует Почему Visual Studio 2015 ругается на функцию s.copy ? Ошибка при использовании функции ошибка при использовании функции mysql_num_rows() Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |