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

时间:2018-09-02 13:16:58

标签: c++ .net c++-cli

我正在尝试访问.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 ::大小

当我删除声明中的“ const”,但我想保持该值为公共且只读时,赋值编译没有错误。

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

1 个答案:

答案 0 :(得分: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