2016-04-22 11 views
0

Ich arbeite an einem Projekt, wo ich ein UDP-Paket über ein WiFi-Modul empfangen und verarbeiten muss. Allerdings bin ich noch ein Anfänger in c/C++ (Student). In meiner Hauptdatei main.cpp verwendete ich die UDPSocket-Klasse, um die Kommunikation zwischen meinem Modul und dem Server zu initialisieren.Fehler bei der Verwendung von extern in C++

UDPSocket server(&eth); 
static void nsp_init() 
{ 
    NSDL_DEBUG("name: %s", endpoint_name); 
    server.open("xxx.xxx.xxx.xxx", xxxx); 

    NSDL_DEBUG("name: %s", endpoint_name); 


    NSDL_DEBUG("EP:%s\n", endpoint_name); 
} 

Das Problem ist in meinem processing.cpp Datei, wo ich die recv Instanz der Klasse zugreifen möchte ich in meinem main.cpp erklärt haben:

#include "ESP8266Interface.h" 
#include "UDPSocket.h" 

extern Serial pc; 
extern ESP8266Interface eth; 
extern UDPSocket server(&eth); //Am getting an error for using this 
extern char endpoint_name[16]; 
extern uint8_t ep_type[]; 
extern uint8_t lifetime_ptr[]; 

Meine Frage ist, kann, wie Ich benutze den gleichen UDPSocket Server (& eth) Ich erklärte in meiner Hauptklasse?

ich zu schätzen weiß wirklich Ihre Eingabe ...

Antwort

3

Eine extern Erklärung für ein Objekt sollte nicht Initialisierung hat, es sei denn, Sie die Deklaration wollen eine Definition sein (in diesem Fall wird server mehrfach definiert, wodurch ein Linkerfehler). Normalerweise würden Sie den Initialisierer in den Deklarationen auslassen und haben es nur für die Definition; Die Initialisierung erfolgt durch die Übersetzungseinheit, in der das Objekt definiert ist. So würde die Erklärung einfach sein:

extern UDPSocket server; 

Eine extern Objektdeklaration ist ein bisschen wie eine Vorwärtsdeklaration einer Funktion. Es empfiehlt sich, diese in Header-Dateien zu speichern. Sie sollten also wahrscheinlich die extern Deklarationen von server und andere Variablen in eine Datei mit foo.h und die Definitionen in foo.cpp verschieben und main.cpp und processing.cpp haben beide foo.h.

Verwandte Themen