Создание объекта (ов) в классе - PullRequest
0 голосов
/ 26 октября 2019

У меня есть эта проблема:

Проблема:

  • Я пытаюсь создать библиотеку (ard33WiFi), которая управляет и обрабатывает несколько других библиотек(Например, библиотека WiFiServer)
  • Мне нужно создать объект сервера, который я затем использую в функциях моей библиотеки (ard33WiFi):

WiFiServer myServer(iPort);

  • Проблема в том, что когда я вызываю myServer в классе, я получаю:

'myServer' was not declared in this scope

Где / как я объявляюMyServer, так что становится доступным для всего класса (ard33WiFi)? Я снял любое объявление, потому что все, что я пытался, было неправильно. Я вставил код скелета ниже.

// HEADER FILE (.h)
// ----------------------------------------------------------------------------------------------
#ifndef Ard33WiFi_h
#define Ard33WiFi_h

#include <WiFiNINA.h>
#include <WiFiUdp.h>

class ard33WiFi{
  public:
    ard33WiFi(int iPort)

    void someFunction();
    void serverBegin();

  private:
    int _iPort;

};
#endif

// ----------------------------------------------------------------------------------------------
// C++ FILE (.cpp)
// -----------------------------------------------------------------------------------------------
#include <Ard33Wifi.h>

ard33WiFi::ard33WiFi(int iPort){
  _iPort = iPort;
}
void ard33WiFi::someFunction(){
  // code here required to prepare the server for initializing
  // but ultimately not relevant to the question
}
void ard33WiFi::serverBegin(){
  myServer.begin();
  Serial.println("Server Online");
}

Я столкнулся с той же проблемой с библиотекой UDP, когда мне нужно вызывать объект UDP в различных функциях для выполнения операций UDP.

Любая помощь будет принята с благодарностью.

1 Ответ

3 голосов
/ 26 октября 2019

Полагаю, вы используете это:

https://www.arduino.cc/en/Reference/WiFiServer

Я вижу, что вы не объявляете myServer в своем классе;что я думаю, это ошибка в вашем коде. Если я не ошибаюсь, это должно быть примерно так:

#ifndef Ard33WiFi_h
#define Ard33WiFi_h

#include <WiFiNINA.h>
#include <WiFiUdp.h>
#include <WiFi.h>  // Not sure if you have to append this include

class ard33WiFi{
  public:
    ard33WiFi(int iPort)

    void someFunction();
    void serverBegin();

  private:
    int _iPort;
    WiFiServer myServer;

};
#endif

Реализация, вам нужно инициализировать экземпляр:

#include <Ard33Wifi.h>

ard33WiFi::ard33WiFi(int iPort):myServer(iPort), _iPort(iPort) {
}

void ard33WiFi::someFunction(){
  // code here required to prepare the server for initializing
  // but ultimately not relevant to the question
}
void ard33WiFi::serverBegin(){
  myServer.begin();
  Serial.println("Server Online");
}

...