Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ #include
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?
Ich bin auf "#pragma once" umgestiegen. Sollte auch gehen, oder hat das irgendwelche Nachteile?
Es ist halt Compilerspezifisch.
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
vBulletin®, Copyright ©2000-2024, Jelsoft Enterprises Ltd.