C ++ / CLI - 访问结构成员

问题描述 投票:0回答:1

我试图访问.NET结构成员,但即使这个简单的例子编译失败:

。H:

using namespace System::Drawing;
namespace MyNamespace{
  public ref class MyClass{
    public:
      MyClass();
      static const System::Drawing::Size MinimumSize = System::Drawing::Size(20,20);
  }
}

CPP:

#include "MyInclude.h"
MyClass::MyClass(){
  int i = MinimumSize.Width;
  // .....
}

将MinimumSize.Width分配给局部变量i的语句无法编译:

  • “没有函数实例”System :: Drawing :: Size :: Width :: get()“匹配参数列表和对象(对象具有阻止匹配的类型限定符)对象类型是const System :: Drawing :: Size

当我删除声明中的“const”时,赋值编译没有错误,但我想将值保持为public和read-only。

有人可以给我一个提示如何指定吗?

c++ .net c++-cli
1个回答
1
投票

我刚尝试过:当我尝试将MinimumSize.Width分配给'i'时,'initonly'产生两条消息:

  • 警告C4395'System :: Drawing :: Size :: Width :: get':将在initonly数据成员'MBcppLibrary :: DrForm :: MinimumSize'(as mentioned by Dmitry Nogin / Hans Passant)的副本上调用成员函数

加上信息

  • “不允许使用initonly字段的地址”

我正在使用这个解决方案:

  1. 只需保留'static const'声明即可
  2. 将类型转换应用于赋值语句
int i = (( System::Drawing::Size)MinimumSize).Width;

这个演员摆脱'const',编译时没有任何错误/警告并按预期执行。或者这有点过于粗暴?

关心PaulTheHacker

© www.soinside.com 2019 - 2024. All rights reserved.