为什么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? 展开
```
#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? 展开
1个回答
展开全部
你是不是误会了什么,把C++和C#搞混了?还是我孤陋寡闻没见识过的奇葩语法?
好还C++和C#我都有过开发经验。
C++语法中有在结构体声明前加的[StructLayoutAttribute(LayoutKind::Sequential, Pack = 1)]是什么东西?
C#貌似又没有宏定义。
好还C++和C#我都有过开发经验。
C++语法中有在结构体声明前加的[StructLayoutAttribute(LayoutKind::Sequential, Pack = 1)]是什么东西?
C#貌似又没有宏定义。
更多追问追答
追问
是CLI编程,为了让C++结构体在C#中使用。现在主要是一样的定义,拆分出来的宏 再用宏组合起来,编译就出错,使用完整定义的宏就没有问题,很奇怪啊。我不是太懂C++
追答
噢
namespace Test {
CLI_CPP_DEFINATION struct A{};
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询