我有一个像这样的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错误:“引用不能绑定(bind)到initonly字段”。是什么赋予了?我该如何摆脱呢?这是Visual Studio 2012 Premium Edition中的版本,但平台工具集是Visual Studio 2008(v90)。
最佳答案
好吧,这是IntelliSense解析器中的错误。由爱迪生设计小组撰写。以编写C++前端而闻名,但是C++/CLI确实给了他们锻炼的机会。通常,它对initonly字段有麻烦(IntPtr::Zero是initonly),类似于here,但与此错误无关。 C++中没有任何等效项可能是一个促成因素。
这样的代码并不需要太多测试,分配是完全多余的。 CLR已经做出了硬保证,即托管类中的所有字段都将被初始化为零。
因此,解决方法1是忽略分配,它没有任何用处。
解决方法2是使用标准的C++构造函数初始化语法:
MyClass::MyClass() : m_ptr(IntPtr::Zero) {}
解决方法#3,位于列表底部的方法是像这样初始化它,避免使用initonly字段:
MyClass::MyClass() {
m_ptr = IntPtr();
}
但我当然会推荐#1。
关于.net - IntelliSense错误: a reference cannot be bound to an initonly field?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16920005/