错误 CS0570 嵌套结构"not supported by the language"



c++/CLI中:

[StructLayout(LayoutKind:Sequential, CharSet=CharSet::Ansi)]
public ref struct NestedStruct
{
public:
    int x;
};
[StructLayout(LayoutKind:Sequential, CharSet=CharSet::Ansi)]
public ref struct AStruct
{
public:
    NestedStruct nestedStruct;
};
在c#:

AStruct s = new AStruct();
s.nestedStruct.x = 7; // ERROR cs0570

在c++/CLI中禁止嵌套结构吗?这个结构应该在一个单独的c#程序集中定义吗?

   NestedStruct nestedStruct;

这是一个问题,NestedStruct不是一个值类型。ref struct遵循本地c++用法,其中结构体和类之间没有真正的区别,只是在默认情况下,结构体的所有成员都是publicref关键字是真正重要的,您声明了引用类型而不是值类型。引用类型的变量应该用hat声明,以使其可被其他。net语言使用。解决办法:

   NestedStruct^ nestedStruct;

如果你想声明一个值类型(如c#中的struct),那么你必须这样写:

   public value class NestedStruct
   {
   public:
       int x;
   };

或者由于您使成员公开,您可以使用value struct并删除public:,因为这是结构体的默认可访问性。

当然,这个"特性"是为了让本地c++程序员适应c++/CLI语法。没有。

相关内容

最新更新