Если вы никогда не захотите изменить A
через его указатель из adt
, то вы должны также сделать этот указатель константным, т. Е .:
struct adt {
const void * A;
};
Это устранит ошибку.
Если вы делаете , хотите изменить A
до adt
, тогда new_adt
должен принимать неконстантный указатель.
Редактировать: более общее примечание, которое может помочь:
Ключевое слово const
, как правило, применяется к типу непосредственно к его left . Однако, если слева от него нет типа, он будет применяться к типу справа. Так:
const int * A
совпадает с int const * A
(const
применяется к int
, а не к указателю), но в int * const A
const применяется к указателю, а не к int.
В Википедии есть более полное объяснение: const-правильность . Раздел «Указатели и ссылки» на этой странице содержит пример, который охватывает различные комбинации const и non-const, которые вы можете применить к указателю.