![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 16.11.2018
Сообщений: 16
|
![]()
Строка
char* HexFormatString = "Any string"; при компиляции дает ошибку, типа, не могу инициализировать char указатель константным char указателем. Та же ошибка лезет, например, в printf("FS",... Что совсем странно. Смысл этой ошибки мне понятен. Я даже знаю, как ее исправить. Разговор не о том. Мне надо понять, почему вообще лезет такая ошибка. По какой-то причине, VC++ посчитал строковый литерал константой. Важно!!! Подобный код нормально работает как на других С++ компиляторах, так и в других проектах на MSVC++. То есть ошибка наверняка связана с какой-то текущей настройкой компилятора, но я примерно не представляю, какой именно. Может, кто-то сталкивался? В качестве стандарта у меня выбран С++ 17. Использую недавно скачанную бесплатную русифицированную версию MSVC++. |
![]() |
![]() |
![]() |
#2 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,828
|
![]()
Потому что стал стараться следовать стандарту. В С++03 уже это было деприкарт.
Цитата:
|
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 16.11.2018
Сообщений: 16
|
![]()
Странно. До этого я что-то не помню, что б когда-нить нарывался на такую ситуацию.
>> Потому что стал стараться следовать стандарту. А есть идеи, как заставить ее расстараться? Ибо ужасно не удобно. |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,828
|
![]() |
![]() |
![]() |
![]() |
#5 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
![]()
А по смыслу как раз очень удобно. Если этот HexFormatString не предполагается менять по месту, то так и напишите
Код:
И как всегда, чтобы успешно выстрелить себе в ногу, можно обмануть компилятор через const_cast. Хотя для сглаживания острых моментов лучше сделать массив: Код:
|
![]() |
![]() |
![]() |
#6 | |
Пользователь
Регистрация: 16.11.2018
Сообщений: 16
|
![]()
Не удобно тем, что у меня есть уже готовый код, порядка 15000 стирок, который нормально работает на другом компиляторе, и мне его надо перенести на MSVC.
Цитата:
Разве что компиллер планирует потом использовать эту же константу для инициализации других переменных. Но - казалось бы, отследить наличие не константной ссылки на нее компилятор в силах. Но - бог с ним. О том, что для кого очевидно, спорить, на самом деле, еще хуже, чем о вкусах. А разговор не о том. Разговор о том, что в моем случае возникает проблема с вызовом функции стандартной библиотеки. Например, printf("какой-то формат",...) выдает ту же ошибку. А вот это уже совсем не катит. Кстати, не знаю, почему. Был уверен, что в хедере параметр описан как просто char* почему-то. Нет. char const* const Format. Тогда вообще не понятно, какого фига ругается. При этом такой вариант: sprintf(Buf, (char*)"0x%X", X); проходит без сообщений. Последний раз редактировалось protoder; 16.11.2018 в 20:03. |
|
![]() |
![]() |
![]() |
#7 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
![]() |
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 16.11.2018
Сообщений: 16
|
![]() |
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,370
|
![]()
Т.е. вы считаете вот такой код должен работать?
"helloworld"[5] = 'A'; Код показывайте, а то у меня ничего такого не выдает. Наличие приведения типа обычно признак проблемы. Последний раз редактировалось waleri; 16.11.2018 в 21:53. |
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 16.11.2018
Сообщений: 16
|
![]()
А вы считаете, что
int A = 5; А = 10; не должно работать? Или вы полагаете, что строка ( с логической точки зрения ) должна чем-то отличаться от числа? >> Код показывайте, а то у меня ничего такого не выдает. А я показал. printf("f") ошибку дает, printf((char*)"f") нет. Ну, я бы сказал, очень спорное мнение. Но в данном контексте не о том речь - просто странно, что после приведения к просто указателю функция параметр принимает. Я этого не могу объяснить (в хедере параметр описан как char const* const Format. Должен быть совместим с константами. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Непонятки с видом инициализации строки. | KAMLS | Общие вопросы C/C++ | 11 | 10.11.2018 09:04 |
Ошибка инициализации | D6ist | Общие вопросы Delphi | 0 | 25.03.2018 17:16 |
Ошибка при инициализации MCI | EvgeniyVaravko | Мультимедиа в Delphi | 8 | 26.11.2017 14:59 |
Ошибка инициализации переменной. | Gdasar | C++ Builder | 11 | 12.11.2014 23:46 |
Ошибка при инициализации PrintDialog | tavrocotaps | Общие вопросы Delphi | 2 | 25.12.2009 14:13 |