类型'& # 39;没有定义的构造函数

本文关键字:定义 构造函数 类型 | 更新日期: 2023-09-27 18:18:06

我试图从另一个cs文件调用方法。我已经创建了方法所在的类的新实例,但是得到这个错误:

类型为"SteamKit2"。没有定义构造函数

谁能帮我理解为什么会发生这种情况?

我试图从中调用此方法的类如下

using System;
using SteamKit2;
using SteamTrade;
using System.Collections.Generic;
using SteamBot;
namespace SteamBot
{
public class HarvesterHandler : UserHandler
{
    public int FriendCount = 0;
    public int FriendToTrade = 0;
    SteamFriends me = new SteamFriends(); 
    public override void OnLoginCompleted()
    {
        FriendCount = me.GetFriendCount();
        if (FriendToTrade < FriendCount)
        {
            Bot.SteamTrade.Trade(me.GetFriendByIndex(FriendToTrade));
            Log.Info("Sending Trade Request to Friend " + FriendToTrade + " of " + FriendCount);
            return;
        }
        while (true)
        {
            Log.Warn("Finished trading");
        }
    }
}
}

引用的类如下(在单独的cs文件中)

using System.Collections.Generic;
using System.Linq;
using System.Text;
using SteamKit2.Internal;
namespace SteamKit2
{
public sealed partial class SteamFriends : ClientMsgHandler
{
    object listLock = new object();
    List<SteamID> friendList;
    List<SteamID> clanList;
    AccountCache cache;

    internal SteamFriends()
    {
        friendList = new List<SteamID>();
        clanList = new List<SteamID>();
        cache = new AccountCache();
    }
    public int GetFriendCount()
    {
        lock ( listLock )
        {
            return friendList.Count;
        }
    }
    public SteamID GetFriendByIndex( int index )
    {
        lock ( listLock )
        {
            if ( index < 0 || index >= friendList.Count )
                return 0;
            return friendList[ index ];
        }
    }
}
}

类型'& # 39;没有定义的构造函数

构造函数定义为内部构造函数。因此,它只能从同一个程序集访问。可能这个构造函数只打算由工厂调用?SteamFriends真的和HarvesterHandler在同一个项目吗?

看起来你正在使用SteamBot,对吗?

我不确定这句话的目的:

SteamFriends me = new SteamFriends(); 

您在单个处理程序中需要的一切都可以在Bot实例中获得。有关SteamFriends的相关信息,请参阅Bot.SteamFriends(参见SimpleUserHandler的一些示例)

关于你的问题,我可以为你提供一个替代方案,因为我不确定为什么GetFriendByIndex不能正常工作,而不花费更多的时间来解决这个项目。

你可以循环遍历bot的整个好友列表(游戏邦注:如果我没记错的话,这个列表最多有250个好友),方法如下:

foreach (Bot.SteamFriends.FriendsListCallback.Friend friend in callback.FriendList)
{
    // Check the friend ID (Steam Profile ID - 64bit number) against what who you want to trade
    if (friend.SteamID == "VALUE YOU ARE EXPECTING")
    {
        Bot.SteamTrade.Trade(friend);
    }
}

将SteamFriends类中的所有方法设置为静态,然后使用classname从类名中访问。你一定会得到解决问题的办法。像——:

public static int GetFriendCount()
    {
        lock ( listLock )
        {
            return friendList.Count;
        }
    }
    public  static SteamID GetFriendByIndex( int index )
    {
        lock ( listLock )
        {
            if ( index < 0 || index >= friendList.Count )
                return 0;
            return friendList[ index ];
        }
    }

和从HarvesterHandler cs文件访问。不要创建类的对象。

干杯! . .

这是因为无参数构造函数的可访问性被设置为内部更改:

internal SteamFriends()

public SteamFriends()