我有一个像这样的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;
}
}
Run Code Online (Sandbox Code Playgroud)
项目编译时没有错误或警告,但是该行m_ptr = IntPtr::Zero总是带有下划线红色,并带有IntelliSense错误:"引用不能绑定到initonly字段".是什么赋予了?我怎么能摆脱这个?
这是在Visual Studio 2012 Premium Edition中,但Platform Toolset是Visual Studio 2008(v90).
嗯,这是IntelliSense解析器中的一个错误.由爱迪生设计集团撰写.以编写C++前端而闻名,但C++/CLI确实为他们提供了锻炼.一般来说,initonly字段有问题(IntPtr :: Zero是initonly),类似于此处,但与此bug无关.在C++中没有任何等价物可能是一个促成因素.
它没有像这样的代码进行测试,分配完全是多余的.CLR已经很难保证托管类中的所有字段都是零初始化的.
因此,解决方法#1只是省略了赋值,它没有做任何有用的事情.
解决方法#2是使用标准C++构造函数初始化语法:
MyClass::MyClass() : m_ptr(IntPtr::Zero) {}
Run Code Online (Sandbox Code Playgroud)
解决方法#3,列表底部的方法是像这样初始化它,避免initonly字段:
MyClass::MyClass() {
m_ptr = IntPtr();
}
Run Code Online (Sandbox Code Playgroud)
但我肯定会推荐#1.
| 归档时间: |
|
| 查看次数: |
429 次 |
| 最近记录: |