попытка сделать модульный код wemos d1 вызывает collect2: ошибка: ld вернул 1 статус выхода статус выхода 1

#include "connection.h"

void setup() {
  Serial.begin(115200);
  Funcs::Connect conn;
  conn.connectWifi();
}

void loop() {

}

затем файл connection.h:

// connection.h

namespace Funcs
{
  class Connect 
  {
    public:
      void connectWifi();
  };
}

а затем connection.cpp

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include "connection.h"
const char* ssid     = "ssid";
const char* password = "password";


namespace Funcs
{

  void connectWifi() {
    // Подключаемся к сети Wi-Fi
    Serial.println();
    Serial.println();
    Serial.print("Connecting to ");
    Serial.println(ssid);

    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED) {
      delay(10);
      Serial.print(".");
    }
    Serial.println("");
    Serial.print("WiFi connected with ip ");
    Serial.println(WiFi.localIP());

  }
}

При компиляции я получаю эту ошибку:

/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.2/cores/esp8266/HardwareSerial.h:76: 
undefined reference to `Funcs::Connect::connectWifi()'

collect2: ошибка: ld вернул 1 статус выхода

collect2: error: ld returned 1 exit status
exit status 1
Error compiling for board WeMos D1 R1.

Но в моем коде нет Funcs::Connect::connectWifi(), он был в старом коде.

, 👍0

Обсуждение

Ваш файл connection.cpp неверен. Взгляните на [Код класса и заголовочные файлы](https://www.learncpp.com/cpp-tutorial/89-class-code-and-header-files/), чтобы узнать, как следует определять методы класса., @hcheung


1 ответ


Лучший ответ:

0

Вы вызываете Funcs::Connect::connectWifi() прямо здесь:

conn.connectWifi();

поскольку conn имеет тип Funcs::Connect

Но вы определили функцию Funcs::connectWifi():

namespace Funcs
{

  void connectWifi() {

где, я думаю, вы хотели, чтобы connectWifi был членом этого класса Connect.

namespace Funcs
{

  void Connect::connectWifi() {

Это не единственная проблема с вашим кодом, вы также создаете экземпляр в настройках и позволяете ему выйти за рамки после вызова только одной функции. Но это другая ошибка. Это юридический код, просто, вероятно, не делает то, что вы хотите.

,