Select struct definition from multiple ones based on platform The Next CEO of Stack OverflowPartial class definition on C++?How can friend function be declared for only one particular function and class?Mutual class instances in C++Platform Independence with C++. Detection and CompilationBool sorted insert function with check if int already exist in listWhy does microsoft use so many macros in their C++ code?C++: Cross reference in subclassesNot default destructor causes incomplete type errorWhy am I getting multiple definition error when header included?#ifdef [true condition] #endif block. Commenting out #ifdef & #endif lines changes compile?
Does the Brexit deal have to be agreed by both Houses?
Trouble understanding the speech of overseas colleagues
How can I get through very long and very dry, but also very useful technical documents when learning a new tool?
Text adventure game code
How do I go from 300 unfinished/half written blog posts, to published posts?
What is the difference between "behavior" and "behaviour"?
How do I solve this limit?
If I blow insulation everywhere in my attic except the door trap, will heat escape through it?
What can we do to stop prior company from asking us questions?
Too much space between section and text in a twocolumn document
How do I construct this japanese bowl?
WOW air has ceased operation, can I get my tickets refunded?
What do "high sea" and "carry" mean in this sentence?
How do scammers retract money, while you can’t?
Solution of this Diophantine Equation
What makes a siege story/plot interesting?
Was a professor correct to chastise me for writing "Prof. X" rather than "Professor X"?
I believe this to be a fraud - hired, then asked to cash check and send cash as Bitcoin
Why didn't Khan get resurrected in the Genesis Explosion?
Why were Madagascar and New Zealand discovered so late?
How to Reset Passwords on Multiple Websites Easily?
Is it a good idea to use COLUMN AS (left([Another_Column],(4)) instead of LEFT in the select?
What does this shorthand mean?
The King's new dress
Select struct definition from multiple ones based on platform
The Next CEO of Stack OverflowPartial class definition on C++?How can friend function be declared for only one particular function and class?Mutual class instances in C++Platform Independence with C++. Detection and CompilationBool sorted insert function with check if int already exist in listWhy does microsoft use so many macros in their C++ code?C++: Cross reference in subclassesNot default destructor causes incomplete type errorWhy am I getting multiple definition error when header included?#ifdef [true condition] #endif block. Commenting out #ifdef & #endif lines changes compile?
Is it possible to have one struct, but two definitions, where the definition is selected via a #define macro? For example:
platform.h
struct Context;
platform_win32.cc:
#include "platform.h"
struct Context
// win32 specific implementation..
bool win;
platform_linux.cc:
#include "platform.h"
struct Context
//Linux specific implementation..
bool lin;
platform.cc:
#define WIN32 //For testing reasons
#ifdef WIN32
#include "platform_win32.cc"
#endif
#ifdef LINUX
#include "platform_linux.cc"
#endif
main.cc:
#include "platform.h"
int main()
Context *context = new Context;
context->win=true;
return 0;
But, this does not compile and returns:
error: invalid use of incomplete type 'struct Context'
note: forward declaration of 'struct Context'
How do I fix this?
c++ api cross-platform
add a comment |
Is it possible to have one struct, but two definitions, where the definition is selected via a #define macro? For example:
platform.h
struct Context;
platform_win32.cc:
#include "platform.h"
struct Context
// win32 specific implementation..
bool win;
platform_linux.cc:
#include "platform.h"
struct Context
//Linux specific implementation..
bool lin;
platform.cc:
#define WIN32 //For testing reasons
#ifdef WIN32
#include "platform_win32.cc"
#endif
#ifdef LINUX
#include "platform_linux.cc"
#endif
main.cc:
#include "platform.h"
int main()
Context *context = new Context;
context->win=true;
return 0;
But, this does not compile and returns:
error: invalid use of incomplete type 'struct Context'
note: forward declaration of 'struct Context'
How do I fix this?
c++ api cross-platform
add a comment |
Is it possible to have one struct, but two definitions, where the definition is selected via a #define macro? For example:
platform.h
struct Context;
platform_win32.cc:
#include "platform.h"
struct Context
// win32 specific implementation..
bool win;
platform_linux.cc:
#include "platform.h"
struct Context
//Linux specific implementation..
bool lin;
platform.cc:
#define WIN32 //For testing reasons
#ifdef WIN32
#include "platform_win32.cc"
#endif
#ifdef LINUX
#include "platform_linux.cc"
#endif
main.cc:
#include "platform.h"
int main()
Context *context = new Context;
context->win=true;
return 0;
But, this does not compile and returns:
error: invalid use of incomplete type 'struct Context'
note: forward declaration of 'struct Context'
How do I fix this?
c++ api cross-platform
Is it possible to have one struct, but two definitions, where the definition is selected via a #define macro? For example:
platform.h
struct Context;
platform_win32.cc:
#include "platform.h"
struct Context
// win32 specific implementation..
bool win;
platform_linux.cc:
#include "platform.h"
struct Context
//Linux specific implementation..
bool lin;
platform.cc:
#define WIN32 //For testing reasons
#ifdef WIN32
#include "platform_win32.cc"
#endif
#ifdef LINUX
#include "platform_linux.cc"
#endif
main.cc:
#include "platform.h"
int main()
Context *context = new Context;
context->win=true;
return 0;
But, this does not compile and returns:
error: invalid use of incomplete type 'struct Context'
note: forward declaration of 'struct Context'
How do I fix this?
c++ api cross-platform
c++ api cross-platform
edited Mar 8 at 13:06
Cryonic
asked Mar 8 at 12:48
CryonicCryonic
135
135
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
Firstly, the declare of type should be write into '.h' file, other than '.cc' or '.c' file.
Secondly, you can declare different type of struct for different platform by #define, like you did.
For example:
platform_win32.h:
struct Context
// win32 specific implementation..
bool field1;
bool field2;
bool field_win_specified;
platform_linux.h:
struct Context
//Linux specific implementation..
bool field1;
bool field2;
bool field_linux_specified;
platform.h:
#ifdef WIN32
#include "platform_win32.h"
#endif
#ifdef LINUX
#include "platform_linux.h"
#endif
main.cc:
#include "platform.h"
int main()
Context *context = new Context;
context->field1=true;
return 0;
Bye the way, because we can not avoid to include a '.h' file more than one time, you should to define tokens to clear up these compiling error(s): e.g., in platform_linux.h file: ``` #ifndef PLATFORM_LINUX_H_ #define PLATFORM_LINUX_H_ //...... #endif // PLATFORM_LINUX_H__ ```
– Yuanhui
Mar 8 at 13:37
add a comment |
For forward-declare like struct Context;
The main rule is that you can only use where memory layout (and thus member functions and data members) do not need to be known in the file you forward-declare it.
Possible fix:
platform.h
#define WIN32 //For testing reasons
#ifdef WIN32
#include "platform_win32.h"
#endif
#ifdef LINUX
#include "platform_linux.h"
#endif
platform_win32.h
struct Context
// win32 specific implementation..
bool win;
platform_linux.h
struct Context
//Linux specific implementation..
bool lin;
main.cc
#include "platform.h"
int main()
Context *context = new Context;
context->win=true;
return 0;
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%2f55063573%2fselect-struct-definition-from-multiple-ones-based-on-platform%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Firstly, the declare of type should be write into '.h' file, other than '.cc' or '.c' file.
Secondly, you can declare different type of struct for different platform by #define, like you did.
For example:
platform_win32.h:
struct Context
// win32 specific implementation..
bool field1;
bool field2;
bool field_win_specified;
platform_linux.h:
struct Context
//Linux specific implementation..
bool field1;
bool field2;
bool field_linux_specified;
platform.h:
#ifdef WIN32
#include "platform_win32.h"
#endif
#ifdef LINUX
#include "platform_linux.h"
#endif
main.cc:
#include "platform.h"
int main()
Context *context = new Context;
context->field1=true;
return 0;
Bye the way, because we can not avoid to include a '.h' file more than one time, you should to define tokens to clear up these compiling error(s): e.g., in platform_linux.h file: ``` #ifndef PLATFORM_LINUX_H_ #define PLATFORM_LINUX_H_ //...... #endif // PLATFORM_LINUX_H__ ```
– Yuanhui
Mar 8 at 13:37
add a comment |
Firstly, the declare of type should be write into '.h' file, other than '.cc' or '.c' file.
Secondly, you can declare different type of struct for different platform by #define, like you did.
For example:
platform_win32.h:
struct Context
// win32 specific implementation..
bool field1;
bool field2;
bool field_win_specified;
platform_linux.h:
struct Context
//Linux specific implementation..
bool field1;
bool field2;
bool field_linux_specified;
platform.h:
#ifdef WIN32
#include "platform_win32.h"
#endif
#ifdef LINUX
#include "platform_linux.h"
#endif
main.cc:
#include "platform.h"
int main()
Context *context = new Context;
context->field1=true;
return 0;
Bye the way, because we can not avoid to include a '.h' file more than one time, you should to define tokens to clear up these compiling error(s): e.g., in platform_linux.h file: ``` #ifndef PLATFORM_LINUX_H_ #define PLATFORM_LINUX_H_ //...... #endif // PLATFORM_LINUX_H__ ```
– Yuanhui
Mar 8 at 13:37
add a comment |
Firstly, the declare of type should be write into '.h' file, other than '.cc' or '.c' file.
Secondly, you can declare different type of struct for different platform by #define, like you did.
For example:
platform_win32.h:
struct Context
// win32 specific implementation..
bool field1;
bool field2;
bool field_win_specified;
platform_linux.h:
struct Context
//Linux specific implementation..
bool field1;
bool field2;
bool field_linux_specified;
platform.h:
#ifdef WIN32
#include "platform_win32.h"
#endif
#ifdef LINUX
#include "platform_linux.h"
#endif
main.cc:
#include "platform.h"
int main()
Context *context = new Context;
context->field1=true;
return 0;
Firstly, the declare of type should be write into '.h' file, other than '.cc' or '.c' file.
Secondly, you can declare different type of struct for different platform by #define, like you did.
For example:
platform_win32.h:
struct Context
// win32 specific implementation..
bool field1;
bool field2;
bool field_win_specified;
platform_linux.h:
struct Context
//Linux specific implementation..
bool field1;
bool field2;
bool field_linux_specified;
platform.h:
#ifdef WIN32
#include "platform_win32.h"
#endif
#ifdef LINUX
#include "platform_linux.h"
#endif
main.cc:
#include "platform.h"
int main()
Context *context = new Context;
context->field1=true;
return 0;
answered Mar 8 at 13:10
YuanhuiYuanhui
307212
307212
Bye the way, because we can not avoid to include a '.h' file more than one time, you should to define tokens to clear up these compiling error(s): e.g., in platform_linux.h file: ``` #ifndef PLATFORM_LINUX_H_ #define PLATFORM_LINUX_H_ //...... #endif // PLATFORM_LINUX_H__ ```
– Yuanhui
Mar 8 at 13:37
add a comment |
Bye the way, because we can not avoid to include a '.h' file more than one time, you should to define tokens to clear up these compiling error(s): e.g., in platform_linux.h file: ``` #ifndef PLATFORM_LINUX_H_ #define PLATFORM_LINUX_H_ //...... #endif // PLATFORM_LINUX_H__ ```
– Yuanhui
Mar 8 at 13:37
Bye the way, because we can not avoid to include a '.h' file more than one time, you should to define tokens to clear up these compiling error(s): e.g., in platform_linux.h file: ``` #ifndef PLATFORM_LINUX_H_ #define PLATFORM_LINUX_H_ //...... #endif // PLATFORM_LINUX_H__ ```
– Yuanhui
Mar 8 at 13:37
Bye the way, because we can not avoid to include a '.h' file more than one time, you should to define tokens to clear up these compiling error(s): e.g., in platform_linux.h file: ``` #ifndef PLATFORM_LINUX_H_ #define PLATFORM_LINUX_H_ //...... #endif // PLATFORM_LINUX_H__ ```
– Yuanhui
Mar 8 at 13:37
add a comment |
For forward-declare like struct Context;
The main rule is that you can only use where memory layout (and thus member functions and data members) do not need to be known in the file you forward-declare it.
Possible fix:
platform.h
#define WIN32 //For testing reasons
#ifdef WIN32
#include "platform_win32.h"
#endif
#ifdef LINUX
#include "platform_linux.h"
#endif
platform_win32.h
struct Context
// win32 specific implementation..
bool win;
platform_linux.h
struct Context
//Linux specific implementation..
bool lin;
main.cc
#include "platform.h"
int main()
Context *context = new Context;
context->win=true;
return 0;
add a comment |
For forward-declare like struct Context;
The main rule is that you can only use where memory layout (and thus member functions and data members) do not need to be known in the file you forward-declare it.
Possible fix:
platform.h
#define WIN32 //For testing reasons
#ifdef WIN32
#include "platform_win32.h"
#endif
#ifdef LINUX
#include "platform_linux.h"
#endif
platform_win32.h
struct Context
// win32 specific implementation..
bool win;
platform_linux.h
struct Context
//Linux specific implementation..
bool lin;
main.cc
#include "platform.h"
int main()
Context *context = new Context;
context->win=true;
return 0;
add a comment |
For forward-declare like struct Context;
The main rule is that you can only use where memory layout (and thus member functions and data members) do not need to be known in the file you forward-declare it.
Possible fix:
platform.h
#define WIN32 //For testing reasons
#ifdef WIN32
#include "platform_win32.h"
#endif
#ifdef LINUX
#include "platform_linux.h"
#endif
platform_win32.h
struct Context
// win32 specific implementation..
bool win;
platform_linux.h
struct Context
//Linux specific implementation..
bool lin;
main.cc
#include "platform.h"
int main()
Context *context = new Context;
context->win=true;
return 0;
For forward-declare like struct Context;
The main rule is that you can only use where memory layout (and thus member functions and data members) do not need to be known in the file you forward-declare it.
Possible fix:
platform.h
#define WIN32 //For testing reasons
#ifdef WIN32
#include "platform_win32.h"
#endif
#ifdef LINUX
#include "platform_linux.h"
#endif
platform_win32.h
struct Context
// win32 specific implementation..
bool win;
platform_linux.h
struct Context
//Linux specific implementation..
bool lin;
main.cc
#include "platform.h"
int main()
Context *context = new Context;
context->win=true;
return 0;
answered Mar 8 at 13:11
C_RajC_Raj
1194
1194
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%2f55063573%2fselect-struct-definition-from-multiple-ones-based-on-platform%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