gpt4 book ai didi

.net - 智能感知错误 : a reference cannot be bound to an initonly field?

转载 作者:行者123 更新时间:2023-12-04 12:09:27 25 4
gpt4 key购买 nike

我有一个像这样的 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 高级版中,但平台工具集是 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 - 智能感知错误 : a reference cannot be bound to an initonly field?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16920005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com