【问题标题】:Cannot define operator无法定义运算符
【发布时间】:2012-06-17 17:53:19
【问题描述】:

我有以下简单类型:

module Structures
    type Point2D<'T> (x : 'T, y : 'T) =
        member this.X = x
        member this.Y = y
        member this.IsEqualTo (p : Point2D<'T>) =
            (this.X = p.X) && (this.Y = p.Y)

但 Visual Studio(2012 试用版)在名称“IsEqualTo”下放置了一条红色波浪线,在“this.X”下放置了一条蓝色波浪线。

红色波浪线的错误信息如下:

在此程序点之前的非统一实例化中使用了通用成员 IsEqualTo。考虑重新排序成员,以便首先出现此成员。或者,显式指定成员的完整类型,包括参数类型、返回类型以及任何其他泛型参数和约束。

蓝线的消息是:

类型参数缺少约束'当'T:相等'

我尝试在所有其他成员之前放置“IsEqualTo”,但错误仍然存​​在。

我猜这个错误与this.X = p.X 中的= 登录在泛型类型'T 上工作有关,但我似乎无法纠正它。

提前感谢您的帮助。

【问题讨论】:

    标签: generics f#


    【解决方案1】:
    type Point2D<'T when 'T : equality> (x : 'T, y : 'T) =
        member this.X = x
        member this.Y = y
        member this.IsEqualTo (p : Point2D<'T>) =
            (this.X = p.X) && (this.Y = p.Y)
    

    【讨论】:

    • 哇,没有意识到错误是如此微不足道。在在这里发布问题之前,我花了将近一个小时的时间搜索和阅读。谢谢。
    猜你喜欢
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多