Хранение «клиента» в структуре на Arduino - PullRequest
1 голос
/ 24 марта 2012

Я пытаюсь сохранить Client в структуре с именем IRCClient.

Компилятор выдаёт мне:

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

Вот структура:

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

Ответы [ 2 ]

0 голосов
/ 24 марта 2012

Как уже было написано, классу Client, похоже, нужны параметры при его создании.Итак, я вижу 2 возможности сохранить экземпляр Client в вашей структуре.

На самом деле в моей настройке Arduino (1.0) кажется, что я не могу напрямую использовать Client, Client - это чисто виртуальный класс, его заменил EthernetClient.

1.Использование EthernetClient (лучший, на мой взгляд, но с Arduino 1.0)

В зависимости от ваших потребностей, возможно, 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);

(я не мог протестировать это решение, как я говорил ранее, Client - это чисто виртуальный класс в Arduino 1.0).

3.Использование указателей

У вас может быть структура с указателем на вашего клиента:

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

А затем, когда вы создаете свой клиент, вы сохраняете его, получая его адрес:

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

Однако при этом соблюдайте осторожность: если ваш клиент будет уничтожен (конец области действия функции ...), ircClient.client будет указывать на ... ничего.

ИВы должны быть знакомы с указателями, чтобы правильно манипулировать хранимым объектом.

0 голосов
/ 24 марта 2012

Из документации Client кажется, что класс Client не имеет конструктора по умолчанию (то есть без параметров).

Вы должны указать IP и порт TPC, к которому подключаться:

byte server[] = { 64, 233, 187, 99 }; // Google

Client client(server, 80);
...