2012-03-24 16 views
1

ClientIRCClientという構造体に格納しようとしています。Arduinoの構造体に 'Client'を格納しています

は、コンパイラが私を与える:

ArduinoIRCd_pde.cpp.o: In function `global constructors keyed to mac': 
ArduinoIRCd_pde.cpp:167: undefined reference to `Client::Client()' 
collect2: ld returned 1 exit status 

ここでは、構造体です:Client documentationから

struct IRCClient { 
    char *nick; 
    char *user; 
    char *host; 
    char *name; 
    int lastping; 
    Client client; 
}; 

答えて

0

、クライアントクラスは(パラメータなしIE)デフォルトコンストラクタを持っていないようです。

それが既に書かれていたとして
byte server[] = { 64, 233, 187, 99 }; // Google 

Client client(server, 80); 
0

、Clientクラスは、それが構築されたときのパラメータを必要とするようだ:

あなたが接続するIPおよびTPCポートを指定する必要があります。だから私はあなたの構造にClientインスタンスを格納する2つの可能性を参照してください。

実際に私のArduinoセットアップ(1.0)では、クライアントを直接使用することはできないようですが、クライアントは純粋な仮想クラスであり、EthernetClientに置き換えられました。あなたのニーズに応じてEthernetClient(私の心の中ではなく、Arduinoの1.0で最高の1)

を使用して

1は、多分EthernetClientが良いです。それはデフォルトコンストラクタを持っています。あなたの構造体にコンストラクタを使用して http://arduino.cc/en/Reference/EthernetClient

2:

struct IRCClient { 
    char *nick; 
    char *user; 
    char *host; 
    char *name; 
    int lastping; 
    Client client; 
    IRCClient(byte * server, int port) : client(server,port) { } 
}; 

byte server[] = { /* ip address */ }; 
IRCClient ircClient(server, 80); 

(私は私が先に言ったように、クライアントはArduinoの1.0で純粋仮想クラスで、このソリューションをテストすることができませんでした)。あなたのクライアントへのポインタで構造を持つことができます

3.使用ポインタ:その後、

struct IRCClient { 
    char *nick; 
    char *user; 
    char *host; 
    char *name; 
    int lastping; 
    Client *client; 
}; 

とは、あなたがあなたのクライアントを作成するとき、あなたはそのアドレスを取得することにより、それを格納します。 ircClient.clienクライアントが破壊された場合(、関数スコープの終わり...):

byte server[] = { /* ip address */ }; 
Client client(server, 80); 
IRCClient ircClient; 
ircClient.client = &client; 

しかしそれをしている間に非常に注意してください何も指さない。

そして、格納されたオブジェクトを正しく操作するためのポインタに精通している必要があります。

関連する問題