2013-06-13 3 views
1

Я пытаюсь вызвать метод из другого cs-файла. Я создал новый экземпляр класса, метод проживает в, но получаю эту ошибку:Тип '' не имеет конструкторов, определенных C#

The type 'SteamKit2.SteamFriends' has no constructors defined

Может кто-нибудь помочь мне понять, почему это происходит?

Класс, в котором я пытаюсь вызвать этот метод из выглядит следующим образом

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 ]; 
     } 
    } 
} 
} 
+2

Попробуйте сделать конструктор 'public' вместо' internal' – Nolonar

ответ

1

конструктор определяемый как внутренний. И поэтому он доступен только из той же сборки. Вероятно, этот конструктор предназначен только для фабрики? Действительно ли SteamFriends в том же проекте, что и HarvesterHandler?

+0

Учитывая имя пространства имен, я бы поставил это так. – Gorpik

+0

Ой, подождите, нет, они не в одном проекте. То же решение, а не тот же проект – AustinGeorge

+0

Хорошо, есть проблема. Внутренний вид виден только внутри одной сборки -> тот же проект –

-1

Это происходит потому, что доступность конструктора без параметров устанавливается на внутреннее изменение:

internal SteamFriends() 

к

public SteamFriends() 
+1

Если я это изменил, ошибка сохраняется. – AustinGeorge

+0

Трудно поверить – Thomas

+4

Сомнительный ответ, конструктор 'SteamFriends', вероятно, был определен как« внутренний »по причине. – Stefan

1

Похоже, что вы используете SteamBot, правильно?

Я не уверен, что цель этой линии:

SteamFriends me = new SteamFriends(); 

Все, что вам нужно в вашем индивидуальном Handler доступен в экземпляре Bot. Для SteamFriends связанной информации смотрите в Bot.SteamFriends (см SimpleUserHandler для некоторых примеров)

по теме на ваш вопрос, я могу предоставить альтернативу для вас, так как я не знаю, почему GetFriendByIndex не работает должным образом, не тратя больше времени Поиск и устранение неисправностей проект.

Вы можете перебрать весь список друзей бота (который имеет максимум 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); 
    } 
} 
0

сделать весь метод статическим в классе SteamFriends, а затем получить доступ к имени класса с именем класса. Несомненно, вы получите решение проблемы. как-:
общественного статические INT GetFriendCount() { замок (listLock) { возвращение friendList.Count; }} общественного статические SteamID GetFriendByIndex (INT индекс) { замок (listLock) { , если (индекс < 0 || Индекс> = friendList.Count) возврат 0;

 return friendList[ index ]; 
    } 
} 

и доступ к файлу HarvesterHandler cs. не делают объект класса.
FriendCount = SteamFriends.GetFriendCount();! ..

Приветствия ..

 Смежные вопросы

  • Нет связанных вопросов^_^