www.mikrocontroller.net

Forum: PC-Programmierung Dev-C++: undeclared - include problems


Autor: daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forum,

ich habe ein Problem beim compilieren. Ich suche und probiere nun schon 
einige Stunden und verstehe nicht wo das Problem ist. Sicherlich scheine 
ich eine Kleinigkeit uebersehen haben aber ich verstehe nicht was?!

Fehler vom Compiler:
`OpenSerialIO' undeclared (first use this function)
`CloseSerialIO' undeclared (first use this function)

Selbst wenn ich die Direktive _WIN32 weglasse aendert sich nichts an der 
Fehlermeldung. Enviorment ist Dev-C++ Version 4.9.9.2 libs und includes 
stammen aus dem Dev-C++ Verzeichnis.

Hier der noetige Code Ausschnitt:

main.cpp
#ifdef _WIN32
 #include <windows.h>
 #include <tchar.h>
 #include <cstdio>
 #include <cstdlib>
 #include <cstring>
 #include <ctime>
 #include "win_io.h"
 #include <sys/types.h>
#else
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <time.h>
 #include <sys/types.h>
#endif
#include "log_error.h"
#include "diagnosticpc.h"

void* hSerial;
char szSerialPort1[];

int diag_init(void)
{
    fdErr = diag_error_init(szFilename);
    hSerial = OpenSerialIO(szSerialPort1);
    return ((long)fdErr & (long)hSerial);
}
...
void diag_exit()
{
     diag_error_exit(fdErr);
     CloseSerialIO(hSerial);
}
...

win_io.cpp
#ifdef _WIN32
#include <windows.h>
#include <tchar.h>
#include <cstdio>
#include "win_io.h"

void* OpenSerialIO(char* cPort)
{
 ...
 return (void*) handle;
}

void CloseSerialIO(void* hCom)
{
   CloseHandle((HANDLE)hCom);
}
...
#endif

win_io.h
#ifdef _DIAG_WIN_IO_H_
 #define _DIAG_WIN_IO_H_
 void* OpenSerialIO(char* cPort);
 void CloseSerialIO(void* hCom);
 ...
#endif

Kann mir jemand einen Hinweis geben oder einen Tipp? Vielleicht ist ja 
etwas falsch eingestellt im Compiler.

Gruss Daniel

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du darfst keine spaces vor dem #include oder #define haben.
    #include ...
geht nicht.
#    include ...
geht.


Gruss

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder ganz konkret
 #include "win_io.h"

wird ignoriert, deshalb hast Du keine forward declarations aus der 
Header Datei.

Autor: daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wirklich ?! ach ohje darauf waere ich nie gekommen ! Ich werde es gleich 
mal aendern und compilieren(probiern).

Vielen Dank
Daniel

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, wirklich :-)

Vergiss die Defines nicht. wie zum Beispiel in win_io.h

#ifdef _DIAG_WIN_IO_H_
 #define _DIAG_WIN_IO_H_

Autor: daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

geaendert und funktionierte dennoch nicht, dann habe ich nochmal alle 
Direktiven durchgeschaut und siehe da:
#ifdef _DIAG_WIN_IO_H_  // the bug is in front of the PC

Vielen Dank auch fuer den Hinweis. Aber ich kann nun doch nicht 
bestaetigen woran es genau lag. Und zum rumprobieren habe ich schon 
genug Zeit vertroedelt.

Gruss Daniel

Autor: daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS: es muss so sein:
#ifndef _DIAG_WIN_IO_H_
 #define _DIAG_WIN_IO_H_

Gruss Daniel

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#ifdef _DIAG_WIN_IO_H_
 #define _DIAG_WIN_IO_H_

das ist wohl kontraproduktiv.
Das heisst im Klartext: Der INhalt vom Header File kommt nur dann zum 
Tragen, wenn es schon ein Definement für DIAG_WIN_IO_H gibt.
Nicht sehr sinnvoll.

Du willst das genaue Gegenteil!

Nur dann, wenn es noch KEIN Definement für DIAG_WIN_IO_H gibt, soll 
der Inhalt der Headerfiles gültig sein.
#ifndef _DIAG_WIN_IO_H_
 #define _DIAG_WIN_IO_H_



#ifndef und nicht #ifdef

(und das erklärt dann auch dein ursprüngliches Problem)

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Daniel,

dann wird das #define aber nicht definiert, dessen bist Du Dir bewusst?

Also kann es sein, dass die Headerdatei mehrfach includiert wird.

Grüsse,
René

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rene H. schrieb:
> Hallo Daniel,
>
> dann wird das #define aber nicht definiert, dessen bist Du Dir bewusst?

Denk noch mal darüber nach :-)

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ggg, ja, hab ich. Ich hab mich nicht geachtet, sonder nur auf das
   #define ...

geguckt :-).

Sorry, ziehe meine Aussage komplett zurück. Schnell gucker fehler :-)

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Allerdings das mit den Spaces stimmt :-)
Zumindest ist das bei meinem Sun CC so.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.