为什么C++ 使用宏定义写结构体,编译错误 5

宏定义如下:```#definePROTOCOL_STRUCT(name)[StructLayoutAttribute(LayoutKind::Sequential,Pa... 宏定义如下:
```
#define PROTOCOL_STRUCT(name) [StructLayoutAttribute(LayoutKind::Sequential, Pack = 1)]\
typedef public ref struct name
#define ATTRIBUTE [StructLayoutAttribute(LayoutKind::Sequential, Pack = 1)]
#define REF typedef public ref
#define CLI_CPP_DEFINATION ATTRIBUTE \
REF
```
使用时,如果使用:

```
namespace Test {
PROTOCOL_STRUCT(A){};
}
```
编译通过
如果使用

```
namespace Test {
CLI_CPP_DEFINATION
struct A{};
}
```
编译出错
Error 4 error C2143: syntax error : missing ';' before '<class-head>'
Error 5 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Error 6 error C3115: 'System::Runtime::InteropServices::StructLayoutAttribute': this attribute is not allowed on 'Test::ref'
7 IntelliSense: invalid combination of type specifiers

为什么呢?初学者,完全不懂。要如何修改,才能使用CLI_CPP_DEFINATION?
展开
 我来答
幻形术
2019-02-01 · TA获得超过1262个赞
知道小有建树答主
回答量:994
采纳率:81%
帮助的人:268万
展开全部
你是不是误会了什么,把C++和C#搞混了?还是我孤陋寡闻没见识过的奇葩语法?
好还C++和C#我都有过开发经验。
C++语法中有在结构体声明前加的[StructLayoutAttribute(LayoutKind::Sequential, Pack = 1)]是什么东西?
C#貌似又没有宏定义。
更多追问追答
追问
是CLI编程,为了让C++结构体在C#中使用。现在主要是一样的定义,拆分出来的宏 再用宏组合起来,编译就出错,使用完整定义的宏就没有问题,很奇怪啊。我不是太懂C++
追答


namespace Test {
CLI_CPP_DEFINATION struct A{};
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式