.net IntelliSense错误:引用不能绑定到initonly字段?

.net IntelliSense错误:引用不能绑定到initonly字段?,.net,c++-cli,.net,C++ Cli,我有这样一个C++/CLI类: // MyClass.h #pragma once namespace MyNamespace { using namespace System; public ref class MyClass { private: MyClass(); IntPtr m_ptr; }; } // MyClass.cpp #include "MyClass.h" using namespace System;

我有这样一个C++/CLI类:

// MyClass.h
#pragma once

namespace MyNamespace {
    using namespace System;

    public ref class MyClass {
    private:
        MyClass();
        IntPtr m_ptr;
    };
}

// MyClass.cpp
#include "MyClass.h"
using namespace System;

namespace MyNamespace {
    MyClass::MyClass() {
        m_ptr = IntPtr::Zero;
    }
}
项目编译时没有错误或警告,但是行
m_ptr=IntPtr::Zero
始终带有带智能感知错误的红色下划线:“引用不能绑定到initonly字段”。有什么好处?我怎样才能摆脱这个


这在Visual Studio 2012高级版中,但平台工具集是Visual Studio 2008(v90)。

嗯,这是IntelliSense解析器中的一个bug。由爱迪生设计小组撰写。非常有名的写C++前端,但C++ + CLI一定给他们一个锻炼。一般来说,它在initonly字段(IntPtr::Zero是initonly)上有问题,类似于此,但与此bug无关。在C++中没有任何等价物可能是一个促成因素。 像这样的代码并不能让它进行测试,赋值是完全多余的。CLR已经硬保证托管类中的所有字段都是零初始化的

因此,解决方法1是省略作业,它不会做任何有用的事情

解决方案2是使用标准C++构造函数初始化语法:

   MyClass::MyClass() : m_ptr(IntPtr::Zero) {}
解决方法#3,列表底部的方法是这样初始化它,避免使用initonly字段:


但是我当然推荐#1。

指针字段(不是IntPtr,真正的指针)也是零初始化的吗?是的,它们在这方面并不特别。
MyClass::MyClass() {
    m_ptr = IntPtr();
}