Fehlerausgabe beim Einbinden eigener Bibliothek

Hallo liebes Forum,

ich sitzt momentan an einem Problem bei dem ich selber keine Lösung mehr finde. Ich habe eine kleine eigene Bibliothek geschrieben, welche das Anzeigen von Debugnachrichten über mqtt und den Seriellen Monitor zusammenführen soll. Beim Kompilieren meines Codes tritt allerdings folgende Fehlermeldung auf.

IoTDeviceTemplate_OTA-MQTT-WIFI:9:12: error: expected initializer before 'wifiCLient'
 WiFiClient wifiCLient;
            ^
IoTDeviceTemplate_OTA-MQTT-WIFI:10:25: error: 'wifiCLient' was not declared in this scope
 PubSubClient mqttClient(wifiCLient);
                         ^
exit status 1

main.ion

#include <Arduino.h>
#include <PubSubClient.h>
#include <ArduinoOTA.h>
#include <ESP8266WiFi.h>
#include <MqttDebug.h>
#include "credentials.h"

WiFiClient wifiCLient; //Hier steigt der compiler aus
PubSubClient mqttClient(wifiCLient);
MqttDebug debuger(mqttClient);

MqttDebug.h

#ifndef MqttDebug_h
#define MqttDebug_h

#endif

#include <Arduino.h>
#include <PubSubClient.h>
#include <Client.h>

class MqttDebug{
    public:
        MqttDebug(PubSubClient& mqttClient);
        void debug(const char *debugMsg);

    private:
        PubSubClient* _mqttClient;
        const char debugTopic[35] = "/topic";

        void setMqttClient(PubSubClient& mqttClient);
}

MqttDebug.cpp

#include "MqttDebug.h"
#include <Arduino.h>

MqttDebug::MqttDebug(PubSubClient& mqttClient){
    setMqttClient(&mqttClient);
}

void MqttDebug::debug(const char *debugMsg){
    if(!_mqttClient.connected()){
        println("Mqtt Server not connected");
    }
    else
    {
        _mqttClient.publish(debugMsg);
    }
    println(debugMsg, debugTopic);
}

void MqttDebug::setMqttClient(PubSubClient& mqttClient){
    this->_mqttClient = &mqttClient;
}

Die eigene Bibliothek sowie die anderen benötigten Libs liegen im Arduino libraries Ordner. Muss gestehen hab schon länger nicht mehr mit Arduino und erst recht nicht mit dem Schreiben eigener Libs Zeit verbracht, weshalb ich jetzt auf eure Hilfe angewiesen bin.

Herzliche Grüße
cronos1

#pragma once 


// include Guard wirkungslos, ist aber nicht dein Hauptproblem
// das findet sich ganz unten
// #ifndef MqttDebug_h
// #define MqttDebug_h
// #endif

#include <Arduino.h>
#include <PubSubClient.h>
#include <Client.h>

class MqttDebug{
    public:
        MqttDebug(PubSubClient& mqttClient);
        void debug(const char *debugMsg);

    private:
        PubSubClient* _mqttClient;
        const char debugTopic[35] = "/topic";

        void setMqttClient(PubSubClient& mqttClient);
}; // <<<------------ Hier!

Natürlich! Doof von mir.

Kannst du mich trotzdem aufklären was es damit auf sich hat?

combie:

#pragma once 

// include Guard wirkungslos, ist aber nicht dein Hauptproblem

dein include Guard war wirkungslos, daher hat combie dir einen funktionierenden geschrieben...

So aufgenommen :wink:

Nach weiteren Arbeiten an der Lib kommt nun noch eine Fehlermeldung auf, welche ich mit meinem Wissen und auch nach Websuche nicht beheben kann.

Vorab möchte ich nochmal klar machen was ich vor hab. Die Bibliothek soll über mqtt und den Seriellen Monitor Debug Nachrichten ausgeben (bereits erwähnt). Mein Gedanke ist natürlich nur auf den mqttClient zu zeigen um so Speicherplatz zu sparen. Falls ich hier gänzlich auf dem falschen Weg bin, nehme ich natürlich gerne Vorschläge entgegen.

So jetzt zur Fehlermeldung:

/Users/lukaswaschul/Documents/Arduino/libraries/MqttDebug/MqttDebug.cpp: In constructor 'MqttDebug::MqttDebug(PubSubClient&)':
/Users/lukaswaschul/Documents/Arduino/libraries/MqttDebug/MqttDebug.cpp:4:46: error: array used as initializer
 MqttDebug::MqttDebug(PubSubClient& mqttClient){
                                              ^

main.ino

#include <Arduino.h>
#include <PubSubClient.h>
#include <ArduinoOTA.h>
#include <ESP8266WiFi.h>
#include <MqttDebug.h>
#include "credentials.h"

WiFiClient wifiCLient;
PubSubClient mqttClient(wifiCLient);
MqttDebug mqttDebuger(mqttClient);

MqttDebug.h

#pragma once 

#include <Arduino.h>
#include "PubSubClient.h"

class MqttDebug{
    private:
        PubSubClient* _mqttClient;
        const char debugTopic[35] = "/basement/3DPrinterEnclouser/debug";

        MqttDebug& setMqttClient(PubSubClient& mqttClient);
    public:
        MqttDebug(PubSubClient& mqttClient);
        void debug(const char* debugMsg);
};

MqttDebug.cpp

#include "MqttDebug.h"
#include "Arduino.h"

MqttDebug::MqttDebug(PubSubClient& mqttClient){
    setMqttClient(mqttClient);
}

void MqttDebug::debug(const char* debugMsg){
    if(!_mqttClient->connected()){
        Serial.println("Mqtt Server not connected");
    }
    else
    {
        _mqttClient->publish(debugTopic, debugMsg);
    }
    Serial.println(debugMsg);
}

MqttDebug& MqttDebug::setMqttClient(PubSubClient& mqttClient){
    this->_mqttClient = &mqttClient;
    return *this;
}
const char debugTopic[35] = "/basement/3DPrinterEnclouser/debug";

Mit C++11 sollte das eigentlich gehen. Sonst nicht.

Die Alternative ist im Konstruktor strcpy()/strncpy() zu verwenden

Super und danke. Ich schau es mir an.