gpt4 book ai didi

c++ - 根据平台从多个结构定义中选择

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:39:17 25 4
gpt4 key购买 nike

是否可以有一个结构,但有两个定义,其中定义是通过#define 宏选择的?例如:

平台.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;
}

平台.cc:

#define WIN32 //For testing reasons

#ifdef WIN32
#include "platform_win32.cc"
#endif

#ifdef LINUX
#include "platform_linux.cc"
#endif

主.cc:

#include "platform.h"

int main()
{
Context *context = new Context;
context->win=true;

return 0;
}

但是,这不会编译并返回:

error: invalid use of incomplete type 'struct Context'
note: forward declaration of 'struct Context'

我该如何解决这个问题?

最佳答案

首先,类型的声明应该写入'.h'文件,而不是'.cc'或'.c'文件。

其次,您可以像您一样通过#define 为不同的平台声明不同类型的结构。

例如:

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;
}

平台.h:

#ifdef WIN32
#include "platform_win32.h"
#endif

#ifdef LINUX
#include "platform_linux.h"
#endif

主.cc:

#include "platform.h"

int main()
{
Context *context = new Context;
context->field1=true;

return 0;
}

关于c++ - 根据平台从多个结构定义中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55063573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com