呼叫是模棱两可的错误-骰子游戏[关闭]

Posted

技术标签:

【中文标题】呼叫是模棱两可的错误-骰子游戏[关闭]【英文标题】:Call is ambiguous error - Dice Game [closed] 【发布时间】:2016-11-13 21:58:04 【问题描述】:

您好,我正在尝试制作骰子游戏并不断收到此错误,不确定是什么错误,或者我的算法是否有问题。任何帮助,将不胜感激。谢谢 :) 它显示一个错误:

以下方法或属性之间的调用不明确: 'Form1.UpdateGameStatus(int)' 和 'Form1.UpdateGameStatus(int)'

    private int UpdateGameStatus(int sumDice)
    

        if (sumDice == 2)
        if (sumDice == 3)
        if (sumDice == 14) 
            lblSum.Text = ("You lost!");
        if (sumDice == 9)
        if (sumDice == 10)
            lblSum.Text = ("You're winner!");
        if (sumDice == 0)
            lblSum.Text = ("Roll again please!");
        return; 

    

    int point = 0;
    int gamestatus = 0;
    private void UpdateGameStatus(int sumDice)
    
        while (sumDice == 4 || sumDice == 5 || sumDice == 6 || sumDice==||sumDice == 9 || sumDice == 10)

            point = sumDice;

        if (sumDice == point)
            lblSum.Text = ("You're winner!");
        gamestatus = 1;
        if (sumDice == 7)
            lblSum.Text = ("You lost!");
        gamestatus = -1;
        return;
    
    private void btnRollDice_Click(object sender, EventArgs e)
    

        int die1 = 0, die2 = 0;
        RollDice(out die1, out die2);
        UpdateGameStatus(sumDice);     
      

      

【问题讨论】:

错误不明白怎么办? 有人告诉我同时使用 void 和 int,但它不允许我使用。有什么方法可以同时使用相同的参数和名称? 错误信息专门回答了这个问题。 【参考方案1】:

你有两个签名相同的方法:

private void UpdateGameStatus(int sumDice)

private int UpdateGameStatus(int sumDice)

编译器不知道你指的是哪一个。它们有不同的返回类型,但它们不是签名的一部分。

【讨论】:

是的,有没有办法让它同时使用?或者我只能使用一个吗?我对此感到困惑。 你可以同时拥有这两种方法,但它们的名字不能相同,或者至少不能采用相同的参数。所以要么重命名其中一个,要么给一个不同的参数。这会让编译器知道你什么时候调用每个。例如,您可以将第一个方法重命名为GetGameStatus(int) 不,如果它们都具有相同的名称和相同的输入,则不能同时使用它们。重命名你不想使用的那个。【参考方案2】:

错误消息告诉您出了什么问题:您正在对UpdateGameStatus 进行模棱两可的调用。您有两个方法,都名为UpdateGameStatus,它们都采用整数值。为什么不只有一个版本可以返回骰子的总和并设置游戏状态?那会解决你的问题。您在这里不必要地复制代码。

编辑:我还注意到您的第一个方法实际上根本不会更新游戏状态,因此如果您确实想保留两者,请考虑重命名那个。

编辑 2:总结一下 cmets 中提到的内容(并且不仅仅是错误消息),您似乎有一些不必要的代码重复。想想你真正想要这个方法做什么。是否要将文本设置为"you lose!"?您是否希望它跟踪 gamestatus 变量(1、0 或 -1)?你想让它返回gamestatus 变量吗?弄清楚你希望这个方法做什么/返回,并尝试删除重复的代码。

【讨论】:

@Flow101 似乎(据我所知) void 只是做了整数 1 已经做的一些事情。我建议使用整数 1,让它根据掷骰结果更新游戏状态/输出消息,然后还返回掷骰结果。我不确定它的确切用途,但只是试着想想这些函数究竟做了什么以及你如何使用数据。如果您关心返回值(1、0 或 -1),请使用 int 类型,如果不关心,请使用 void 类型(您只关心设置游戏状态) @Flow101 也就是说,将它们组合起来;充分利用每一个并将它们放在一起。你必须自己决定什么是重要的,你是设计程序的人。

以上是关于呼叫是模棱两可的错误-骰子游戏[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

System.Windows.Markup.XamlParseException调试Windows Phone应用程序时[关闭]

HTML5 服务器发送事件原型 - 模棱两可的错误和重复轮询?

如何以编程方式进行一响呼叫以及如何判断我呼叫的线路是不是已关闭?

Java方法(DiceProblem)[关闭]

swift 关闭呼叫的一部分

屏幕关闭时,Android 10 会阻止网络请求和 GPS 呼叫