Использование const структуры typedef с указателем - PullRequest
0 голосов
/ 16 ноября 2018

Хорошо, у меня возникла серьезная проблема при попытке использовать определенную структуру.Давайте начнем с этого:

typedef const struct x 
{
 ....
} *y;

, а затем у меня есть другая структура, в которой есть y, например:

struct Z
{
     ...
     y someName;
};

Теперь моя главная проблема заключается в том, что я не могу понять, какиспользуйте это, чтобы назначить что-то для someName.

Если я использую x и сделаю что-то вроде

struct x anotherName =
{
    assignedThing
};

, попытка сделать что-то вроде

Z.someName = anotherName; 

не скажет, что anotherName не может быть приведено как тип y.

Очевидно, что я не могу попытаться обмануть его, сделав ay, а затем присвоив определенную часть из другого имени, потому что y является const структурой и не может быть изменена позже.

Я также не могу сделать

struct y anotherName

, что не удается, и я не могу сделать

y anotherName = 
{
};

, потому что он утверждает, что больше чем один элемент слишком много для инициализации, когдаоригинальная структура имеет вид 14.

Так что, честно говоря, я потерян здесь.Могу ли я вообще создать определенный экземпляр y или использовать мой текущий определенный экземпляр x?Я что-то упускаю (я чувствую, что я есть)?Я не в состоянии, где я могу переписать любую из исходных структур или изменить ее на const или удалить тот факт, что он является указателем, так что любая информация здесь будет оценена.

1 Ответ

0 голосов
/ 16 ноября 2018

Я думаю, что главная проблема здесь в том, что вы путаете типы struct x и y.

struct x - это struct, тогда как y - это pointer to struct.

Таким образом, вы не можете присвоить Z.someName = anotherName;, поскольку anotherName имеет тип struct x, а someName имеет тип y.

Вместо этого вы должны сделать

Z.someName = &anotherName

Аналогично, вы не можете напрямую присвоить структуру типизированной переменной указателя как

y anotherName = 
{
};

Вы создаете struct xпеременная и назначьте ее адрес переменной типа y:

struct x someOtherName =
{
};
y anotherName = &someOtherName;
...