0 / 0 / 0
Регистрация: 24.09.2008
Сообщений: 26
|
||||||
1 | ||||||
Невозможно преобразовать из char в const char16.03.2009, 17:05. Показов 11328. Ответов 16
Метки нет (Все метки)
Добрый день!
В строке вызова функции razdacha(Deck, Face, Suit); возникает ошибка invalid conversion from char** to const char**. Подскажите, пожалуйста, в чем проблема. Код ниже.Спасибо.
0
|
16.03.2009, 17:05 | |
Ответы с готовыми решениями:
16
Error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *' Printf: невозможно преобразовать параметр 1 из 'char' в 'const char *' Невозможно преобразовать параметр 1 из 'char' в 'const char *' Невозможно преобразовать из const char в char* |
Maniac
|
||||||
16.03.2009, 17:26 | 2 | |||||
сделай так
0
|
0 / 0 / 0
Регистрация: 24.09.2008
Сообщений: 26
|
|
16.03.2009, 17:28 [ТС] | 3 |
Спасибо, работает!
0
|
0 / 0 / 1
Регистрация: 08.10.2013
Сообщений: 21
|
|
08.10.2013, 16:32 | 4 |
День добрый, столкнулся с той же проблемой в такой же задаче, как решить здесь написали, а может кто-нибудь объяснить почему я не могу передать char** в const char**?
Это как то связано с тем, что мы в функцию передаем массив указателей? С обычными указателями таких проблем по моему не возникает... Хотелось бы разобраться в этом вопросе.
0
|
544 / 93 / 49
Регистрация: 16.12.2011
Сообщений: 317
|
||||||
08.10.2013, 17:13 | 5 | |||||
Lodos, почему не можете.
1
|
08.10.2013, 17:19 | 6 |
это const - "для защиты от себя". смысл в том, чтоб не забыл, что менять эначение по этому указателю нельзя. только явное преобразование типов требуется. тогда компилятор имеет ввиду, что ты "знаешь, что делаешь", и пропускает.
1
|
0 / 0 / 1
Регистрация: 08.10.2013
Сообщений: 21
|
|
08.10.2013, 17:51 | 7 |
Спасибо, явное преобразование помогло. Меня смутило то, что в аналагичной ситуации, не для массива указателей, а для одиночного указателя, компилятор явного преобразования не требовал.
0
|
0 / 0 / 1
Регистрация: 08.10.2013
Сообщений: 21
|
||||||
28.10.2013, 12:15 | 9 | |||||
к примеру ни в одной функции явное преобразование не требуется:
0
|
28.10.2013, 12:49 | 10 | |||||
посмотри на, например,
0
|
0 / 0 / 1
Регистрация: 08.10.2013
Сообщений: 21
|
|
28.10.2013, 14:37 | 11 |
Согласен, но это вобщем то просто пример нескольких возможных вариантов передачи неконстантных данных в константные аргументы.
Что я хотел показать: В ф-ю 1 передаются оба аргумента "по значению" - явное преобразование компилятор не затребовал. В ф-ю 2 указатель char передается "по ссылке" а int "по значению", - явное преобразование тоже не нужно. В ф-ю 3 передается массив, который в свою очередь, является указателем, и тут тоже не нужно явное преобразование. А вот в примере, который выше: , в котором передается массив ссылок, без явного преобразования компилятор выдавет ошибку (во всяком случае мой). Собственно я и написал, что для случаев одинокого указателя (ф-я 2 и ф-я 3) мне не требовалось явно приводить к константным данным.
0
|
28.10.2013, 15:38 | 12 |
если в списке аргументов стоит const, то это "гарантирует", что ф-я не изменит значение этого аргумента. поэтому туда можно передать как const, так и нет.
Добавлено через 19 минут свой первый пост я хочу еще немного обдумать, возможно удастся коротко и ясно сформулировать (а может и нет).
0
|
0 / 0 / 1
Регистрация: 08.10.2013
Сообщений: 21
|
|
28.10.2013, 15:42 | 13 |
Это-то как раз интуитивно понятно.
Непонятно почему в случае если мы так же передаем массив указателей требуется явно переводить (const char **), хотя в более простых случаях это необязательно. Собственно именно это меня и смутило (признаюсь, просто не подумал, что явное преобразование может помочь). Думаю это у меня компилятор такой, более логичного объяснения я не вижу.
0
|
28.10.2013, 18:16 | 14 | |||||||||||||||
объяснение все-таки имеется.
в случае
теперь так:
теперь наш интересный случай:
0
|
0 / 0 / 1
Регистрация: 08.10.2013
Сообщений: 21
|
|
29.10.2013, 09:43 | 15 |
т.е. насколько я понимаю компилятор указывает, что при
хоть у нас и указана const int но с помощью указателей мы все равно можем поменять константные данные? Собственно на эту возможность он и ругается?
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
29.10.2013, 11:54 | 16 |
Ваще то всё проще: межу const и не const просто запрещены некоторые неявные преобразования. Напиши перед параметром нудный const тип указателя в скобках.
0
|
29.10.2013, 17:24 | 17 |
именно так. поэтому компилятор и требует явное преобразование, иначе смысла в этом const вообще не было бы никакого.
1
|
29.10.2013, 17:24 | |
29.10.2013, 17:24 | |
Помогаю со студенческими работами здесь
17
Ошибка: "char *concat(char *,.)": невозможно преобразовать аргумент 1 из "const char [4]" в "char *" Error C2440: return: невозможно преобразовать "const char *" в "const char (&)[6]" Невозможно преобразовать 'const char [6]' в 'long' Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *" Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |