1

別の cs ファイルからメソッドを呼び出そうとしています。メソッドが存在するクラスの新しいインスタンスを作成しましたが、次のエラーが発生します。

タイプ 'SteamKit2.SteamFriends' にはコンストラクターが定義されていません

なぜこれが起こっているのかを理解するのを手伝ってくれる人はいますか?

このメソッドを呼び出そうとしているクラスは次のとおりです

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 ];
        }
    }
}
}
4

4 に答える 4

1

SteamBotを使用しているようですね。

この行の目的がわかりません:

SteamFriends me = new SteamFriends(); 

個々の Handler で必要なものはすべて、Botインスタンスで利用できます。SteamFriends関連情報についてBot.SteamFriendsは、参照してください (いくつかの例については、 SimpleUserHandlerを参照してください)。

GetFriendByIndexあなたの質問に関連して、プロジェクトのトラブルシューティングに時間を費やさないと が正しく機能しない理由がわからないため、代わりの方法を提供できます。

次のようなことを行うことで、ボットのフレンドリスト全体をループできます (Valve システムの制限を正しく覚えていれば、最大 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);
    }
}
于 2013-06-14T16:13:17.900 に答える
1

コンストラクターは internal として定義されています。したがって、同じアセンブリからのみアクセスできます。おそらく、このコンストラクターはファクトリによって呼び出されることのみを目的としていますか? SteamFriends は本当に HarvesterHandler と同じプロジェクトにあるのですか?

于 2013-06-13T10:37:26.297 に答える
0

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 ファイルからアクセスします。クラスのオブジェクトを作成しないでください。
FriendCount = SteamFriends.GetFriendCount();..

乾杯 !..

于 2014-04-25T11:43:27.137 に答える
-1

これは、パラメーターなしのコンストラクターのアクセシビリティが internal change に設定されているためです。

internal SteamFriends()

public SteamFriends()
于 2013-06-13T10:37:26.780 に答える