Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么在尝试调用方法时会出现对象引用错误?_C#_Winforms - Fatal编程技术网

C# 为什么在尝试调用方法时会出现对象引用错误?

C# 为什么在尝试调用方法时会出现对象引用错误?,c#,winforms,C#,Winforms,对于这段代码,我在尝试调用Square.EffectOnPlayer(player)时出错 错误表示需要对象引用,为什么不接受player public void Move(int numberOfSquares, Player player) { int current_pos; int new_pos; current_pos = Square.GetSquarenumber(location); new_pos = numberOfSquares + c

对于这段代码,我在尝试调用
Square.EffectOnPlayer(player)时出错
错误表示需要对象引用,为什么不接受
player

public void  Move(int numberOfSquares, Player player) {
    int current_pos;
    int new_pos;

    current_pos = Square.GetSquarenumber(location);
    new_pos = numberOfSquares + current_pos;

    location = Board.GetGameBoardSquare(new_pos);

    Square.EffectOnPlayer(player);
}
如果需要,将刷新页面以提供更多信息

编辑 这是该方法引用的square类库(省略变量):

此函数不是静态的,而其他函数是静态的,因此在不引用Square类实例的情况下调用EffectOnPlayer将导致错误。因此,您要么需要对Square实例的引用,要么将其设置为静态

如果只给Move函数一个正方形实例的引用,那么一切都应该正常

public void  Move(int numberOfSquares, Player player, Square square)
{
     square.EffectOnPlayer(player);
     ...
}

您的平方变量是类还是对象实例?你能告诉我们
Square
的定义和
EffectOnPlayer
方法吗?调试你的代码(调试是任何程序员最基本和最重要的技能)并告诉我们什么是Square。Square可能不是静态的。如果问题是由Square不是静态的引起的,有没有一种方法可以避免平方静态的问题?@user2396303是的,如果你不想使某个东西静态,那么你需要在某处保留一个引用。从生成单例到保留引用数组,再到传递参数。在不知道你的应用程序做了什么,也不知道它是完整的代码的情况下,你应该如何继续,这是一个未知的问题。但是当我想调用move时,我是否需要将某人放入
square
?我在这里猜测一些,但我猜你希望玩家发生一些事情,这取决于玩家站在哪个square上。因此,您需要以某种方式获取玩家当前所在的方形实例,并使用该实例调用EffectOnPlayer。那么,您是否有某种形式的数据结构,其中包含不同的方块?如果是这样,则创建一个函数来获取当前的square实例并使用它。
public override void EffectOnPlayer(Player who)
{
    Random rand = new Random();

    if (rand.Next(0, 2) == 0)
        who.Deduct(one_hundred);
    else
        who.Add(one_hundred);
}
public void  Move(int numberOfSquares, Player player, Square square)
{
     square.EffectOnPlayer(player);
     ...
}