|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
27.02.2023, 23:20 | #1 |
Форумчанин
Регистрация: 22.01.2014
Сообщений: 313
|
Указатели.
Здравствуйте! Создал функцию, которая принимает указатель на указатель одним из параметров, а вызываю эту функцию с аргументом не константным указателем на указатель и, как итог, ошибка.
cannot convert parameter 1 from 'TCHAR **' to 'const TCHAR *[]' Не могу понять в чём дело. Код:
|
28.02.2023, 07:43 | #2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,760
|
|
28.02.2023, 07:50 | #3 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,010
|
apofioz, попробуй так
BOOL WhatIsWeight(const TCHAR* const* ppPropFont, const int nSizePropFont); |
28.02.2023, 08:04 | #4 |
Пользователь
Регистрация: 12.05.2011
Сообщений: 58
|
TCHAR ** - указатель на указатель
TCHAR *[] - массив указателей Компилятор вполне резонно пишет 'cannot convert'. Нет? |
28.02.2023, 08:20 | #5 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,010
|
AbakBarama, в аргументе функции такие пустые скобочки эквивалентны звёздочке, так что там у него именно TCHAR** . Но проблема не в этом, а в квалификаторе
|
28.02.2023, 12:49 | #6 |
Форумчанин
Регистрация: 22.01.2014
Сообщений: 313
|
|
28.02.2023, 12:51 | #7 |
Форумчанин
Регистрация: 22.01.2014
Сообщений: 313
|
Что это значит? Константный указатель на константные данные или всё же нет?
Да, так собирается, но осталось много не ясного. Последний раз редактировалось apofioz; 28.02.2023 в 13:05. |
28.02.2023, 14:48 | #8 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,010
|
apofioz, я попытался найти в тырнете ответ. Насколько я понял, происходит следущее:
int** имеет такой тип Код:
Код:
поэтому из int** получается int const* const* , а в сигнатуре функции был указан int const* * . в деталях могу ошибаться, но вроде как-то так происходит |
28.02.2023, 16:37 | #9 |
Форумчанин
Регистрация: 22.01.2014
Сообщений: 313
|
Алексей1153 НИЧЕГО НЕ ПОНЯТНО, если есть указатель на int*, а, скажем, в функции параметр const int*, то int* не может преобразоваться к const int*, а преобразуется int const* const*, но почему не к const TCHAR* const*, и как это читать и ещё неплохо бы понимать... Насколько я понимаю это не константный указатель на константные данные, так?
Нет, в сигнатуре функции const TCHAR**, точнее const TCHAR* [], что одно и тоже. Что следует понимать под уровнем косвенности? |
28.02.2023, 17:42 | #10 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,010
|
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 |