![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 22.01.2014
Сообщений: 313
|
![]()
Здравствуйте! Создал функцию, которая принимает указатель на указатель одним из параметров, а вызываю эту функцию с аргументом не константным указателем на указатель и, как итог, ошибка.
cannot convert parameter 1 from 'TCHAR **' to 'const TCHAR *[]' Не могу понять в чём дело. Код:
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,815
|
![]() |
![]() |
![]() |
![]() |
#3 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,032
|
![]()
apofioz, попробуй так
BOOL WhatIsWeight(const TCHAR* const* ppPropFont, const int nSizePropFont); |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 12.05.2011
Сообщений: 58
|
![]()
TCHAR ** - указатель на указатель
TCHAR *[] - массив указателей Компилятор вполне резонно пишет 'cannot convert'. Нет? |
![]() |
![]() |
![]() |
#5 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,032
|
![]()
AbakBarama, в аргументе функции такие пустые скобочки эквивалентны звёздочке, так что там у него именно TCHAR** . Но проблема не в этом, а в квалификаторе
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 22.01.2014
Сообщений: 313
|
![]() |
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 22.01.2014
Сообщений: 313
|
![]()
Что это значит? Константный указатель на константные данные или всё же нет?
Да, так собирается, но осталось много не ясного. Последний раз редактировалось apofioz; 28.02.2023 в 13:05. |
![]() |
![]() |
![]() |
#8 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,032
|
![]()
apofioz, я попытался найти в тырнете ответ. Насколько я понял, происходит следущее:
int** имеет такой тип Код:
Код:
поэтому из int** получается int const* const* , а в сигнатуре функции был указан int const* * . в деталях могу ошибаться, но вроде как-то так происходит |
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 22.01.2014
Сообщений: 313
|
![]()
Алексей1153 НИЧЕГО НЕ ПОНЯТНО, если есть указатель на int*, а, скажем, в функции параметр const int*, то int* не может преобразоваться к const int*, а преобразуется int const* const*, но почему не к const TCHAR* const*, и как это читать и ещё неплохо бы понимать... Насколько я понимаю это не константный указатель на константные данные, так?
Нет, в сигнатуре функции const TCHAR**, точнее const TCHAR* [], что одно и тоже. Что следует понимать под уровнем косвенности? |
![]() |
![]() |
![]() |
#10 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,032
|
![]()
apofioz, int я для примера привёл. Вместо него любой тип можешь представить (к слову, TCHAR - это вообще не тип, а макрос)
уровень косвенности - это одна звёздочка |
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Указатели - надо начальную букву в слове сделать большой используя указатели | FerrariF70 | Общие вопросы C/C++ | 13 | 08.09.2017 04:28 |
Указатели | viks1 | Помощь студентам | 6 | 17.04.2013 01:18 |
Указатели | Alexandr- | Помощь студентам | 8 | 16.03.2013 23:23 |
Указатели | AquaticSoul | Общие вопросы C/C++ | 5 | 22.12.2009 15:13 |
[C] массивы, указатели, двойные указатели. | Iggel | Общие вопросы C/C++ | 5 | 05.05.2009 12:39 |