c++ compiler-Fehlermeldung "wurde nicht deklariert in diesem Bereich"
Ich bin immer ein bizarre compiler-Fehler beim kompilieren eines c++ - UDP-client-Programm.
g++ -o client Udp.cpp ClientMain.c -I. -lpthread
In der Datei enthalten, aus ClientMain.c:1:0:
Udp.h: In destructor 'CUdpMsg::~CUdpMsg()':
Udp.h:103:43: Fehler: "frei" wurde nicht deklariert in diesem Umfang
Udp.h: In member function 'void CUdpMsg::Add(in_addr_t, const void*, size_t)':
Udp.h:109:34: Fehler: 'malloc' wurde nicht deklariert, in diesem Umfang
Udp.h:109:41: Fehler: 'memcpy' wurde nicht deklariert, in diesem Umfang
ClientMain.c: In function 'int main(int, char**)':
ClientMain.c:28:57: Fehler: 'memcpy' wurde nicht deklariert, in diesem Umfang
ClientMain.c:29:61: Fehler: "printf" wurde nicht deklariert in diesem Umfang
ClientMain.c:30:17: Fehler: "stdout" nicht deklariert, in diesem Umfang
ClientMain.c:30:23: Fehler: "fflush" wurde nicht deklariert in diesem Umfang
ClientMain.c:34:68: Fehler: "printf" wurde nicht deklariert in diesem Umfang
ClientMain.c:35:17: Fehler: "stdout" nicht deklariert, in diesem Umfang
ClientMain.c:35:23: Fehler: "fflush" wurde nicht deklariert in diesem Umfang
ClientMain.c:37:30: error: 'usleep' wurde nicht deklariert, in diesem Umfang
Habe ich Folgendes deklariert am Anfang meiner cpp-Datei.
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <ifaddrs.h>
#include <net/if.h>
#include <cstdlib>
#include <string>
#include <stdlib.h>
#include <cstring>
#include <errno.h>
Funktionen wie 'memcpy' erklärt werden sollte in der Zeichenkette.h... ich habe es (und string und cstring) alles erklärt, und ich bin immer noch daran, diese compiler-Fehler. Hat jemand eine Ahnung, warum dies passiert ist? Danke.
ClientMain.c
(Hinweis:.c
, nicht .cpp
)?Ich glaube, Sie brauchen, um einige dieser Dateien in
UDP.h
sind Sie angeben, std-namespace für diese Funktion ruft
Sie brauchen nicht, um anzugeben
std::malloc
wenn Sie inklusive der C-Header (d.h. der ist .h)ich bin damit einverstanden. aber es ist keine gute Praxis einschließlich der beiden
<stdlib.h>
und <cstdlib>
.InformationsquelleAutor Mike | 2011-07-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie mehrere Dateien haben, dann brauchen Sie die entsprechenden includes in jeder Datei. Auch vielleicht nicht innerhalb des namespace?
InformationsquelleAutor dchhetri
Ihre
Udp.h
Datei auch muss die benötigte system-Header. Zusätzlich, da Sie die Verwendungcstring
undcstdlib
als Ihren enthält, werden Sie brauchen, um sich zu qualifizieren, alle C-library-Funktionen mitstd::
da Sie nicht automatisch importiert, in den globalen Namensraum von diesen Headern.Udp.h
in allen übersetzungseinheiten (wäre dies eine schlechte Praxis, wenn).InformationsquelleAutor Mark B
Mark B alle bedeckt, die genauen Ursachen Ihrer Fehler. Ich möchte nur hinzufügen, dass man versuchen sollte, nicht zu mischen der zwei Versionen der C-Header in einem einzigen cpp-Datei (
#include <cHEADER>
vs#include <HEADER.h>
).Den
#include <cHEADER>
Sorte bringt alle enthaltenen Erklärungen in das std:: - namespace. Die#include <HEADER.h>
- Dateien enthalten Deklarationen nicht. Es ist ärgerlich, code zu verwalten, wenn Sie Sie brauchenstd::malloc()
aber::strncpy()
. Wählen Sie eine Vorgehensweise für jede Datei oder, vorzugsweise, ein Ansatz für das gesamte Projekt.Als separates Problem, dem man begegnet eine situation, in der ein header nicht selbst enthalten alles, was es braucht. Dies kann ärgerlich sein, zu Debuggen, da Fehler können erscheinen oder verschwinden, je nach Bestellung.
Wenn Sie einen header/cpp-pair-Mädchen, immer abgestimmt header den ersten gehören, die in der cpp-Datei, das garantiert, dass der header abgeschlossen ist und auf eigenen Beinen stehen können. Wenn Sie eine standalone-header, der braucht keine Implementierung, können Sie immer noch eine leere .cpp test die header gehören Vollständigkeit, oder führen Sie einfach den header durch Ihren compiler selbst. Sie tun dies mit jedem Kopf, den Sie erstellen, zu verhindern Kopfschmerzen, wie Ihre aktuelle.
InformationsquelleAutor Greg Howell
Eine saubere Lösung ist wahrscheinlich, sich zu bewegen, die Umsetzung der
CUdpMsg::~CUdpMsg
ausudp.h
zuudp.cpp
, und ebenso jede Funktion, die Ihnen solche Fehler. Nur definieren Sie Funktionen in Header, wenn Sie sind wirklich einfach (z.B. Getter).InformationsquelleAutor MSalters