You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB6中能否将Coord结构体作为类属性类型?编译报错求助

VB.NET中自定义结构体作为类属性时出现重载解析失败错误的解决方法

嘿,我来帮你搞定这个问题!你遇到的System.MissingMemberException错误主要源自两个容易忽略的问题:命名冲突和属性赋值的语法错误,咱们逐个解决:

问题1:属性与结构体同名导致的歧义

你把类的属性和自定义结构体都命名为Coord,这会让编译器彻底懵圈——当你在属性声明里写As Coord时,它分不清你指的是那个自定义结构体,还是正在声明的这个属性本身,直接导致重载解析失败。

问题2:属性赋值用了方法调用的语法

你赋值时写的Current.Coord(NewCoord)是方法调用的写法,但你定义的是属性,不是方法,属性赋值必须使用赋值运算符=。

修改后的代码示例

第一步:调整命名避免冲突

把结构体或者属性的名字改一个,让它们区分开,比如把结构体改成Coordinate,属性改成Position:

' 先定义自定义结构体(换个名字)
Public Structure Coordinate
    Public x As Integer
    Public y As Integer
End Structure

' 类中的私有字段和属性
Private coordinate As Coordinate
Public Property Position() As Coordinate
    Get
        Return coordinate
    End Get
    Set(ByVal Value As Coordinate)
        ' 结构体是值类型,直接赋值更简洁,和你手动复制x/y效果一致
        coordinate = Value
    End Set
End Property

第二步:用正确的语法赋值

' 假设NewCoord是Coordinate类型的实例
Current.Position = NewCoord

额外小提示

如果你特别想保留结构体名为Coord,也可以在属性声明时明确指定类型的范围(比如全局命名空间)来消除歧义,写法如下:

Public Property Position() As Global.Coord
    Get
        Return coordinate
    End Get
    Set(ByVal Value As Global.Coord)
        coordinate = Value
    End Set
End Property

不过还是更推荐避免同名命名,让代码可读性更高~

内容的提问来源于stack exchange,提问作者adep7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:14:43