PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ #include


blax
2007-01-09, 17:59:56
hi,

irgendwie versteh ich grad garnix. Meine Struktur sieht in etwa so aus:
frm1.h:

#include "frm2.h"
#include "tisch.h"

//KOT

Wenn ich jetz in "frm2.h" eine in "tisch.h" definierte Klasse (Tisch) verwenden will, bekomm ich den Fehler: "Fehlende Speicherklasse oder Typspezifizierer".
Wenn ich in "frm2.h" jedoch auch "tisch.h" inkludiere, etwa so:
frm2.h:

#include "tisch.h"

//KOT


..dann bekomm ich die Fehlermeldung
'Tisch': 'class' Neudefinition


also wie/was jetz?..
wie kann ich jetz Tisch auch in frm2 verwenden?
lg sevi

Matrix316
2007-01-09, 18:02:39
Mach doch mal das #include "tisch.h" aus dem ersten frm2.h weg, und lass es in frm2.h drinnen

Gnafoo
2007-01-09, 18:39:27
Das mit der Neudefinition ist logisch. Schließlich wird die Definition der Klasse indirekt durch "frm2.h" eingebunden. Da du später die Header-Datei ein zweites mal inkludierst, stehen nach dem Preprocessing zwei Klassendeklarationen in der Datei. Das ist btw. der Grund, warum man Header-Guards benutzt und die Header-Dateien damit einschließt. Beispiel:


#ifndef _TISCH_H_
#define _TISCH_H_

class Tisch
{
//...
}

#endif // _TISCH_H_


Dann macht es nichts, wenn beides untereinander vorkommt, weil nur das erste Vorkommen abgearbeitet wird. Danach ist _TISCH_H_ definiert und der Codeblock wird übersprungen.

Was den anderen Fehler angeht: "Fehlende Speicherklasse oder Typspezifizierer". Klingt imho nach fehlendem Rückgabetyp bei einer Methode o. ä. Vielleicht solltest du mal die "tisch.h" hier posten.

AlphaTier@work
2007-01-09, 18:57:59
#ifndef _TISCH_H_
#define _TISCH_H_



Ich bin auf "#pragma once" umgestiegen. Sollte auch gehen, oder hat das irgendwelche Nachteile?

Coda
2007-01-09, 19:06:18
Ich bin auf "#pragma once" umgestiegen. Sollte auch gehen, oder hat das irgendwelche Nachteile?

Es ist halt Compilerspezifisch.

blax
2007-01-09, 20:15:31
ok, also erstmal danke für eure Bemühungen :)

dann..
ich verwende
#pragma once

dann.. gebe ich zu, sie heißt nicht tisch.h :)


Im restlichen Code sind keine Fehler, weil den kann ich ausführen, wenn ich alles was mit tcpconnection.h zu tun hat, weglasse.
so in der art sieht das aus (hab jetz die ganzen unnötigen Zeilen rausgelöscht)


#pragma once

#include "tcpconnection.h"

namespace gui_layout{
public __gc class Details : public System::Windows::Forms::Form{

public:
//tcp connection to plug board list
TcpClientConnection *clientConnection;

public:
Details(){
//blbalbla
}
//ballbalba
};
}



ich werd das ganze einmal auf das wesentlichste Beschränken, damit ich mehr übersicht hab und andere Fehler ausschließen kann.
Dann poste ich nochmal

danke und lg,
sevi