错误cs0570嵌套结构“语言不支持”

时间:2015-07-12 15:17:28

标签: .net c++-cli

在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#程序集中定义?

1 个答案:

答案 0 :(得分:0)

   NestedStruct nestedStruct;

这是一个问题,NestedStruct不是值类型。 ref struct遵循原生C ++用法,其中结构和类之间没有真正的区别,除了结构默认情况下它的所有成员 public ref关键字是真正重要的关键字,您声明了引用类型而不是值类型。应使用hat声明引用类型的变量,以使其可供其他.NET语言使用。修正:

   NestedStruct^ nestedStruct;

如果你实际上想要声明一个值类型(比如C#中的struct)那么你必须写:

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

或者,由于您将该成员公开,因此您可以使用value struct并删除public:,因为这是结构的默认辅助功能。

Fwiw,这个“功能”旨在让本机C ++程序员熟悉C ++ / CLI语法。它没有。