C++: Strukturen aus anderen Headerfiles verwenden
*jiriki*
- programmiertechnik
Hallo Leute,
Ich habe für meine Studienarbeit mit C++ angefangen, habe daher noch wenig Erfahrung im Umgang mit Strukturen und Pointern, daher hoffe ich, dass die Lösung des Problems von einfacher Natur ist.
Ich habe eine Klasse A, in der ich eine Struktur definiere und in A.h als Headerfile abspeichere.
A.h:
****
class A
{
struct S
{
{
Vertex * coord;
int signum;
float distance;
};
}
..
.
};
Dann habe ich eine Klasse B in der Datei B.h, in der ich nun eine Liste definiere, in dessen Knoten ich als Werte diese Struktur ablegen möchte.
B.h:
****
#include "A.h"
class node
{
A::S * pointerToStructure;
node * prev;
node * next;
};
class B
{
node * front;
node * back;
void insert( A::S * value );
..
.
};
Der Compiler bringt mir den Error:
error C2653: 'A' : is not a class or namespace name ...
An der Definition der Struktur sollte es nicht liegen, denn in der A.cpp kann ich sie ohne Probleme verwenden.
Danke für jede Hilfe und Gruß
So, da hab ichs Problem gelöst bekommen und wills hier kurz schildern:
Es lag daran, dass ich sowohl in HeaderFile A.h den Header B.h eingebunden hatte, als auch viceversa. Mit dem Zyklus kam der Compilierer nicht klar. Das Problem hab ich jetzt dadurch gelöst, dass ich in beiden Dateien die jeweils andere Klasse geforwarded hab:
A.h
****
class B;
und
B.h
****
class A;
So weiss der Compilierer, dass die jeweils andere Klasse sicher existiert und lässt mich mit den Pointern in Ruh'.
Soweit
Es lag daran, dass ich sowohl in HeaderFile A.h den Header B.h eingebunden hatte, als auch viceversa. [...]
Ein beliebter Trick hierzu besteht darin, in jedes
Headerfile ein Präprozessormakro nach folgendem
Muster einzubauen:
#ifndef __Headerfilename_H__
#define __Headerfilename_H__
// Hier folgt der eigentliche Inhalt
// des Headerfiles
#endif
So kann das Headerfile auf jeden Fall nicht
doppelt eingelesen werden.
MfG
Andreas
Moin!
Es lag daran, dass ich sowohl in HeaderFile A.h den Header B.h eingebunden hatte, als auch viceversa.
Wozu brauchst den Inhalt von B.h in A.h?
Mit dem Zyklus kam der Compilierer nicht klar.
Ich würde als Compiler auch wuschig, wenn ich einer #include-Endlosschleifen nachsteigen müsste. Andreas hat _den_ Ansatz beschrieben, mit dem dein Problem gut gelöst wird.
Viele Grüße,
Robert