IntelliSense错误:引用无法绑定到initonly字段?

时间:2013-06-04 14:06:37

标签: .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;

namespace MyNamespace {
    MyClass::MyClass() {
        m_ptr = IntPtr::Zero;
    }
}

项目编译时没有错误或警告,但是行m_ptr = IntPtr::Zero总是带有下划线红色,并带有IntelliSense错误:"引用不能绑定到initonly字段"。是什么赋予了?我怎么能摆脱这个?

这是在Visual Studio 2012 Premium Edition中,但Platform Toolset是Visual Studio 2008(v90)。

1 个答案:

答案 0 :(得分:6)

嗯,这是IntelliSense解析器中的一个错误。由爱迪生设计集团撰写。以编写C ++前端而闻名,但C ++ / CLI确实为他们提供了锻炼。一般来说,initonly字段有问题(IntPtr :: Zero是initonly),类似于here,但与此bug无关。在C ++中没有任何等价物可能是一个促成因素。

它没有像这样的代码进行测试,分配完全是多余的。 CLR已经很难保证托管类中的所有字段都是零初始化的。

所以解决方法#1只是省略了作业,它没有做任何有用的事情。

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

   MyClass::MyClass() : m_ptr(IntPtr::Zero) {}

解决方法#3,列表底部的方法是像这样初始化它,避免 initonly 字段:

MyClass::MyClass() {
    m_ptr = IntPtr();
}

但我当然建议#1。