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


von daniel (Gast)


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
1
#ifdef _WIN32
2
 #include <windows.h>
3
 #include <tchar.h>
4
 #include <cstdio>
5
 #include <cstdlib>
6
 #include <cstring>
7
 #include <ctime>
8
 #include "win_io.h"
9
 #include <sys/types.h>
10
#else
11
 #include <stdio.h>
12
 #include <stdlib.h>
13
 #include <string.h>
14
 #include <time.h>
15
 #include <sys/types.h>
16
#endif
17
#include "log_error.h"
18
#include "diagnosticpc.h"
19
20
void* hSerial;
21
char szSerialPort1[];
22
23
int diag_init(void)
24
{
25
    fdErr = diag_error_init(szFilename);
26
    hSerial = OpenSerialIO(szSerialPort1);
27
    return ((long)fdErr & (long)hSerial);
28
}
29
...
30
void diag_exit()
31
{
32
     diag_error_exit(fdErr);
33
     CloseSerialIO(hSerial);
34
}
35
...

win_io.cpp
1
#ifdef _WIN32
2
#include <windows.h>
3
#include <tchar.h>
4
#include <cstdio>
5
#include "win_io.h"
6
7
void* OpenSerialIO(char* cPort)
8
{
9
 ...
10
 return (void*) handle;
11
}
12
13
void CloseSerialIO(void* hCom)
14
{
15
   CloseHandle((HANDLE)hCom);
16
}
17
...
18
#endif

win_io.h
1
#ifdef _DIAG_WIN_IO_H_
2
 #define _DIAG_WIN_IO_H_
3
 void* OpenSerialIO(char* cPort);
4
 void CloseSerialIO(void* hCom);
5
 ...
6
#endif

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

Gruss Daniel

von Rene H. (Gast)


Lesenswert?

Du darfst keine spaces vor dem #include oder #define haben.
1
    #include ...
geht nicht.
1
#    include ...
geht.


Gruss

von Rene H. (Gast)


Lesenswert?

Oder ganz konkret
1
 #include "win_io.h"

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

von daniel (Gast)


Lesenswert?

Hallo,

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

Vielen Dank
Daniel

von Rene H. (Gast)


Lesenswert?

Ja, wirklich :-)

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

1
#ifdef _DIAG_WIN_IO_H_
2
 #define _DIAG_WIN_IO_H_

von daniel (Gast)


Lesenswert?

Hallo,

geaendert und funktionierte dennoch nicht, dann habe ich nochmal alle 
Direktiven durchgeschaut und siehe da:
1
#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

von daniel (Gast)


Lesenswert?

PS: es muss so sein:
1
#ifndef _DIAG_WIN_IO_H_
2
 #define _DIAG_WIN_IO_H_

Gruss Daniel

von Karl H. (kbuchegg)


Lesenswert?

1
#ifdef _DIAG_WIN_IO_H_
2
 #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.
1
#ifndef _DIAG_WIN_IO_H_
2
 #define _DIAG_WIN_IO_H_


#ifndef und nicht #ifdef

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

von Rene H. (Gast)


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é

von Karl H. (kbuchegg)


Lesenswert?

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

Denk noch mal darüber nach :-)

von Rene H. (Gast)


Lesenswert?

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

geguckt :-).

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

von Rene H. (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.