Using a typedef const struct with a pointer












0















Okay so I have been having a major issue trying to use a specific struct.
Lets start with it:



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


and then I have another struct that has y in it like so:



struct Z
{
...
y someName;
};


Now my main issue here is that I cannot figure out how to use this to assign something to someName.



If I use x and do something like



struct x anotherName =
{
assignedThing
};


trying to do something like



Z.someName = anotherName; 


fails saying that anotherName cant be cast as y type.



Obviously I cant try to cheat it by making a y and then assigning the specific part from anotherName because y is a const struct and cant be changed later.



I also cant do



struct y anotherName


that fails, and I cant do



y anotherName = 
{
};


because it claims that anymore than one item is too many to initialize when the original struct has like 14.



So frankly im lost here. Is there anyway for me to actually create a defined instance of y or use my currently defined instance of x? Am I missing something obvious (I feel like I am)? Im not in a position where I can rewrite any of the original structs or change it from const or remove the fact that its a pointer so any insight here would be appreciated.










share|improve this question


















  • 2





    Welcome to Stack Overflow. Note what is said in Is it a good idea to typedef pointers? — TL;DR the answer is no, except perhaps for function pointers. You should omit the const from the typedef; you're travails indicate why. It is very hard to use correctly; I'm not sure I want to spend the time necessary to work it out when the fix (omit const from the typedef) is so simple. You apply the const-ness when you use it (which is also another reason for not typedefing pointers.

    – Jonathan Leffler
    Nov 16 '18 at 4:59











  • Oh I know its not good. I just dont have the power to do so.

    – Justin Dobson
    Nov 16 '18 at 5:00






  • 2





    Note that in y anotherName = { … }; you are initializing a single pointer (a y is a const struct x *), so anything more than one item in the initializer is wrong (and the braces are optional but permitted). Maybe you were thinking of using a compound literal: y anotherName = &(struct x){ …initializer for struct x… };? I'll leave it for you to work out how much constness is needed and where. My brain's hurting at the thought of it all.

    – Jonathan Leffler
    Nov 16 '18 at 5:05
















0















Okay so I have been having a major issue trying to use a specific struct.
Lets start with it:



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


and then I have another struct that has y in it like so:



struct Z
{
...
y someName;
};


Now my main issue here is that I cannot figure out how to use this to assign something to someName.



If I use x and do something like



struct x anotherName =
{
assignedThing
};


trying to do something like



Z.someName = anotherName; 


fails saying that anotherName cant be cast as y type.



Obviously I cant try to cheat it by making a y and then assigning the specific part from anotherName because y is a const struct and cant be changed later.



I also cant do



struct y anotherName


that fails, and I cant do



y anotherName = 
{
};


because it claims that anymore than one item is too many to initialize when the original struct has like 14.



So frankly im lost here. Is there anyway for me to actually create a defined instance of y or use my currently defined instance of x? Am I missing something obvious (I feel like I am)? Im not in a position where I can rewrite any of the original structs or change it from const or remove the fact that its a pointer so any insight here would be appreciated.










share|improve this question


















  • 2





    Welcome to Stack Overflow. Note what is said in Is it a good idea to typedef pointers? — TL;DR the answer is no, except perhaps for function pointers. You should omit the const from the typedef; you're travails indicate why. It is very hard to use correctly; I'm not sure I want to spend the time necessary to work it out when the fix (omit const from the typedef) is so simple. You apply the const-ness when you use it (which is also another reason for not typedefing pointers.

    – Jonathan Leffler
    Nov 16 '18 at 4:59











  • Oh I know its not good. I just dont have the power to do so.

    – Justin Dobson
    Nov 16 '18 at 5:00






  • 2





    Note that in y anotherName = { … }; you are initializing a single pointer (a y is a const struct x *), so anything more than one item in the initializer is wrong (and the braces are optional but permitted). Maybe you were thinking of using a compound literal: y anotherName = &(struct x){ …initializer for struct x… };? I'll leave it for you to work out how much constness is needed and where. My brain's hurting at the thought of it all.

    – Jonathan Leffler
    Nov 16 '18 at 5:05














0












0








0








Okay so I have been having a major issue trying to use a specific struct.
Lets start with it:



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


and then I have another struct that has y in it like so:



struct Z
{
...
y someName;
};


Now my main issue here is that I cannot figure out how to use this to assign something to someName.



If I use x and do something like



struct x anotherName =
{
assignedThing
};


trying to do something like



Z.someName = anotherName; 


fails saying that anotherName cant be cast as y type.



Obviously I cant try to cheat it by making a y and then assigning the specific part from anotherName because y is a const struct and cant be changed later.



I also cant do



struct y anotherName


that fails, and I cant do



y anotherName = 
{
};


because it claims that anymore than one item is too many to initialize when the original struct has like 14.



So frankly im lost here. Is there anyway for me to actually create a defined instance of y or use my currently defined instance of x? Am I missing something obvious (I feel like I am)? Im not in a position where I can rewrite any of the original structs or change it from const or remove the fact that its a pointer so any insight here would be appreciated.










share|improve this question














Okay so I have been having a major issue trying to use a specific struct.
Lets start with it:



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


and then I have another struct that has y in it like so:



struct Z
{
...
y someName;
};


Now my main issue here is that I cannot figure out how to use this to assign something to someName.



If I use x and do something like



struct x anotherName =
{
assignedThing
};


trying to do something like



Z.someName = anotherName; 


fails saying that anotherName cant be cast as y type.



Obviously I cant try to cheat it by making a y and then assigning the specific part from anotherName because y is a const struct and cant be changed later.



I also cant do



struct y anotherName


that fails, and I cant do



y anotherName = 
{
};


because it claims that anymore than one item is too many to initialize when the original struct has like 14.



So frankly im lost here. Is there anyway for me to actually create a defined instance of y or use my currently defined instance of x? Am I missing something obvious (I feel like I am)? Im not in a position where I can rewrite any of the original structs or change it from const or remove the fact that its a pointer so any insight here would be appreciated.







c pointers struct typedef






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 16 '18 at 4:50









Justin DobsonJustin Dobson

82




82








  • 2





    Welcome to Stack Overflow. Note what is said in Is it a good idea to typedef pointers? — TL;DR the answer is no, except perhaps for function pointers. You should omit the const from the typedef; you're travails indicate why. It is very hard to use correctly; I'm not sure I want to spend the time necessary to work it out when the fix (omit const from the typedef) is so simple. You apply the const-ness when you use it (which is also another reason for not typedefing pointers.

    – Jonathan Leffler
    Nov 16 '18 at 4:59











  • Oh I know its not good. I just dont have the power to do so.

    – Justin Dobson
    Nov 16 '18 at 5:00






  • 2





    Note that in y anotherName = { … }; you are initializing a single pointer (a y is a const struct x *), so anything more than one item in the initializer is wrong (and the braces are optional but permitted). Maybe you were thinking of using a compound literal: y anotherName = &(struct x){ …initializer for struct x… };? I'll leave it for you to work out how much constness is needed and where. My brain's hurting at the thought of it all.

    – Jonathan Leffler
    Nov 16 '18 at 5:05














  • 2





    Welcome to Stack Overflow. Note what is said in Is it a good idea to typedef pointers? — TL;DR the answer is no, except perhaps for function pointers. You should omit the const from the typedef; you're travails indicate why. It is very hard to use correctly; I'm not sure I want to spend the time necessary to work it out when the fix (omit const from the typedef) is so simple. You apply the const-ness when you use it (which is also another reason for not typedefing pointers.

    – Jonathan Leffler
    Nov 16 '18 at 4:59











  • Oh I know its not good. I just dont have the power to do so.

    – Justin Dobson
    Nov 16 '18 at 5:00






  • 2





    Note that in y anotherName = { … }; you are initializing a single pointer (a y is a const struct x *), so anything more than one item in the initializer is wrong (and the braces are optional but permitted). Maybe you were thinking of using a compound literal: y anotherName = &(struct x){ …initializer for struct x… };? I'll leave it for you to work out how much constness is needed and where. My brain's hurting at the thought of it all.

    – Jonathan Leffler
    Nov 16 '18 at 5:05








2




2





Welcome to Stack Overflow. Note what is said in Is it a good idea to typedef pointers? — TL;DR the answer is no, except perhaps for function pointers. You should omit the const from the typedef; you're travails indicate why. It is very hard to use correctly; I'm not sure I want to spend the time necessary to work it out when the fix (omit const from the typedef) is so simple. You apply the const-ness when you use it (which is also another reason for not typedefing pointers.

– Jonathan Leffler
Nov 16 '18 at 4:59





Welcome to Stack Overflow. Note what is said in Is it a good idea to typedef pointers? — TL;DR the answer is no, except perhaps for function pointers. You should omit the const from the typedef; you're travails indicate why. It is very hard to use correctly; I'm not sure I want to spend the time necessary to work it out when the fix (omit const from the typedef) is so simple. You apply the const-ness when you use it (which is also another reason for not typedefing pointers.

– Jonathan Leffler
Nov 16 '18 at 4:59













Oh I know its not good. I just dont have the power to do so.

– Justin Dobson
Nov 16 '18 at 5:00





Oh I know its not good. I just dont have the power to do so.

– Justin Dobson
Nov 16 '18 at 5:00




2




2





Note that in y anotherName = { … }; you are initializing a single pointer (a y is a const struct x *), so anything more than one item in the initializer is wrong (and the braces are optional but permitted). Maybe you were thinking of using a compound literal: y anotherName = &(struct x){ …initializer for struct x… };? I'll leave it for you to work out how much constness is needed and where. My brain's hurting at the thought of it all.

– Jonathan Leffler
Nov 16 '18 at 5:05





Note that in y anotherName = { … }; you are initializing a single pointer (a y is a const struct x *), so anything more than one item in the initializer is wrong (and the braces are optional but permitted). Maybe you were thinking of using a compound literal: y anotherName = &(struct x){ …initializer for struct x… };? I'll leave it for you to work out how much constness is needed and where. My brain's hurting at the thought of it all.

– Jonathan Leffler
Nov 16 '18 at 5:05












1 Answer
1






active

oldest

votes


















0














I think the main issue here is that you're confusing the types of struct x and y.



struct x is a struct whereas y is a pointer to struct.



So you can't assign Z.someName = anotherName; as anotherName is of type struct x and someName is of type y.



You should instead do



Z.someName = &anotherName


Similarly, you can't assign the struct to the pointer typed variable directly as



y anotherName = 
{
};


You create a struct x variable and assign it's address to variable of type y:



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





share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53331637%2fusing-a-typedef-const-struct-with-a-pointer%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    I think the main issue here is that you're confusing the types of struct x and y.



    struct x is a struct whereas y is a pointer to struct.



    So you can't assign Z.someName = anotherName; as anotherName is of type struct x and someName is of type y.



    You should instead do



    Z.someName = &anotherName


    Similarly, you can't assign the struct to the pointer typed variable directly as



    y anotherName = 
    {
    };


    You create a struct x variable and assign it's address to variable of type y:



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





    share|improve this answer




























      0














      I think the main issue here is that you're confusing the types of struct x and y.



      struct x is a struct whereas y is a pointer to struct.



      So you can't assign Z.someName = anotherName; as anotherName is of type struct x and someName is of type y.



      You should instead do



      Z.someName = &anotherName


      Similarly, you can't assign the struct to the pointer typed variable directly as



      y anotherName = 
      {
      };


      You create a struct x variable and assign it's address to variable of type y:



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





      share|improve this answer


























        0












        0








        0







        I think the main issue here is that you're confusing the types of struct x and y.



        struct x is a struct whereas y is a pointer to struct.



        So you can't assign Z.someName = anotherName; as anotherName is of type struct x and someName is of type y.



        You should instead do



        Z.someName = &anotherName


        Similarly, you can't assign the struct to the pointer typed variable directly as



        y anotherName = 
        {
        };


        You create a struct x variable and assign it's address to variable of type y:



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





        share|improve this answer













        I think the main issue here is that you're confusing the types of struct x and y.



        struct x is a struct whereas y is a pointer to struct.



        So you can't assign Z.someName = anotherName; as anotherName is of type struct x and someName is of type y.



        You should instead do



        Z.someName = &anotherName


        Similarly, you can't assign the struct to the pointer typed variable directly as



        y anotherName = 
        {
        };


        You create a struct x variable and assign it's address to variable of type y:



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






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 16 '18 at 6:51









        iVoidiVoid

        471111




        471111
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53331637%2fusing-a-typedef-const-struct-with-a-pointer%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Bressuire

            Vorschmack

            Quarantine