2013-06-13 52 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

这是因为参构造函数的可访问性设置为内部变化:就像您使用SteamBot,正确

internal SteamFriends() 

public SteamFriends() 
+1

如果我改变了,错误依然存在。 – AustinGeorge

+0

很难相信 – Thomas

+4

可疑的答案是,“SteamFriends”的构造函数可能被定义为“internal”。 – Stefan

1

它看起来?

我不知道此行的目的:在您的个人需要处理程序

SteamFriends me = new SteamFriends(); 

一切都在Bot实例可用。对于Bot.SteamFriendsSteamFriends相关信息看(见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); 
    } 
} 
0

使SteamFriends类中的所有方法都是静态的,然后使用classname从类名访问。 当然你会得到问题的解决方案。 喜欢 - :
公共静态 INT GetFriendCount() { 锁(listLock) { 返回friendList.Count; } } 公共静态 SteamID GetFriendByIndex(INT指数) { 锁(listLock) { 如果(索引< 0 ||指数> = friendList.Count) 返回0;

 return friendList[ index ]; 
    } 
} 

和从HarvesterHandler cs文件访问。 不作为班级的对象。
FriendCount = SteamFriends.GetFriendCount(!); ..

干杯..

相关问题