Using a typedef const struct with a pointer
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
add a comment |
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
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 theconst
from thetypedef
; 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 (omitconst
from thetypedef
) is so simple. You apply theconst
-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 iny anotherName = { … };
you are initializing a single pointer (ay
is aconst 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
add a comment |
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
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
c pointers struct typedef
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 theconst
from thetypedef
; 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 (omitconst
from thetypedef
) is so simple. You apply theconst
-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 iny anotherName = { … };
you are initializing a single pointer (ay
is aconst 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
add a comment |
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 theconst
from thetypedef
; 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 (omitconst
from thetypedef
) is so simple. You apply theconst
-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 iny anotherName = { … };
you are initializing a single pointer (ay
is aconst 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
add a comment |
1 Answer
1
active
oldest
votes
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;
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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;
add a comment |
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;
add a comment |
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;
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;
answered Nov 16 '18 at 6:51
iVoidiVoid
471111
471111
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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 thetypedef
; 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 (omitconst
from thetypedef
) is so simple. You apply theconst
-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 (ay
is aconst 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