2013-11-20 25 views
1

MyDate是一个包含year,month,day,Span构造函数和其他一些方法的结构。我想我会试图覆盖一些运营商,看看我能否做到这一点。我在MSDN中找到了一个重写结构中的运算符的例子,并试图用我需要的操作来复制它。 我将此代码添加到结构MyDate以覆盖“ - ”,减去。结构中的Overriden运算符在使用时出现错误“不能应用...”

public static int operator -(MyDate a, MyDate b) 
    { 
     return a.Span - b.Span; 
    } 

当我在另一个程序使用它:

 MyDate aDate = new MyDate(2, 15, 1990); 
     MyDate bDate = new MyDate(3, 15, 1990); 
     lAns = bDate - aDate; 

我得到的错误: 错误1个操作“ - ”不能应用于类型的操作数“EulerLibrary.MyDate”和“EulerLibrary。 MyDate'C:\ Users \ Henry Wollman \ Documents \ Visual Studio 2010 \ Projects \ EulerProblem19 \ EulerProblem19 \ Form1.cs 115 20 EulerProblem19

有关为什么这不起作用的任何想法?正如我之前所说,它完全反映了MSDN中的示例。

+0

对于您自己的数据类型**,'-'不会重载。您必须重载该操作员。 –

+2

它应该像描述的那样工作。所以你的实际代码不是所描述的。你能发布一个独立的repro吗? – usr

+0

这应该可以,你是否在其他项目中引用了旧版本的程序集? – Lee

回答

1

假设您在问题中提供的operator -代码包含在MyDate的定义中,那么您发布的内容应该可以正常工作。

因为你说“当我在另一个程序中使用它”时,我认为发生的事情是MyDate定义的程序集是陈旧的(例如,其他程序正在拾取与添加的程序不同的副本重载的操作符)。也许有编译错误的MyDate程序集,它不被重建?

+0

我认为这可能是问题,并重新编译包含MyDate结构定义的库。我在图书馆遇到了一些麻烦。我找不到一个简单的方法来指定一个调试版本或发布版本,有时候符号文件没有被包含,但是引用似乎没有给我一种确保符号被加载的方法。我已经制定了一个在Visual Studio的一个实例中修改和构建库的系统,然后我的程序在另一个实例中使用该库,并且它通常工作。我所做的其他更改已经显示出来。我会给它看看。 –

+0

我不得不挖掘一下,但最终发现该引用指向了错误的dll。现在编译,我只需要调试一些东西。谢谢您的帮助。 –

相关问题