Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] Befreundete Klassen ...
TheDodger
30-07-2003, 07:22
Ich habe da ein kleines logisches Problem ...
Bei der Klasse A wird im Header eine enum Liste angelegt, die public ist.
Klasse B wird nicht von der Klasse A abgeleitet und soll diese Liste ebenfalls nutzen können.
class A {
public:
enum Type { Eins, Zwei };
A() ;
~A();
};
class B {
public:
B( A::Type type );
~B();
};
Nur irgendwie klappt das nicht ganz so ... und ich will die enum nicht wirklich global halten ...
Poste mal Code,der nicht läuft :)
Es ist schwer dir zu helfen,wenn dein geposteter Code hier korrekt ist.
so sollte es funktionieren (nicht getestet):
class A {
public:
enum Type { Eins, Zwei };
A() ;
~A();
friend class B;
};
class B {
public:
B( A::Type type );
~B();
};
anda_skoa
30-07-2003, 10:08
Original geschrieben von wraith
Poste mal Code,der nicht läuft :)
Es ist schwer dir zu helfen,wenn dein geposteter Code hier korrekt ist.
Stimmt, kompiliert ohne Warnings (wenn man die fehlenden Bodies hinzufügt)
Ciao,
_
TheDodger
30-07-2003, 11:30
har ...
ich hatte in Klasse B die Klasse A als friend deklariert ... hmmm
aber ...
modules\setborder_colorstyle.h(41) : error C2653: 'SetBorder' : Keine Klasse oder Namespace
modules\setborder_colorstyle.h(41) : error C2629: 'class BorderColorStyle (' unerwartet
modules\setborder_colorstyle.h(41) : error C2238: Unerwartete(s) Token vor ';'
modules\setborder_colorstyle.h(55) : error C2653: 'SetBorder' : Keine Klasse oder Namespace
modules\setborder_colorstyle.h(55) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'm_type'
modules\setborder_colorstyle.h(55) : error C2501: 'Type' : Fehlende Speicherklasse oder Typbezeichner
modules\setborder_colorstyle.h(55) : error C2501: 'm_type' : Fehlende Speicherklasse oder Typbezeichner
setborder.h:
class SetBorder
: public uiSetBorder {
Q_OBJECT
public:
/**
Setzt den Typ, welche Art von Border bearbeitet werden soll.
*/
enum Type { Color, Style, Width, Margin, Padding };
/**
Die Position der einzelnen Border.
*/
enum Position { Top, Right, Bottom, Left };
/**
Constructor.
*/
SetBorder( Type type, const char* value, QWidget* parent, const char* name );
/**
Destructor.
*/
~SetBorder();
/**
Gibt den ausgewählten Wert zurück.
*/
QString value();
friend class BorderColorStyle();
};
-----------
setborder_colorstyle.h:
class BorderColorStyle
: public uiBorderColorStyle {
Q_OBJECT
public:
/**
Constructor.
*/
BorderColorStyle( SetBorder::Type type, const char* value, QWidget* parent, const char* name );
/**
Destructor.
*/
~BorderColorStyle();
};
SetBorder wäre in dem Falle Klasse A und BorderColorStyle Klasse B ...
ja, die includes stimmen! :)
TheDodger
30-07-2003, 11:44
Urgs ... ich vergaß noch etwas ...
In Klasse A wird Klasse B erzeugt ... ist das vielleicht eine Fehlermöglichkeit?
anda_skoa
30-07-2003, 11:45
du brauchst keinen Friend, wenn BorderColorStyle nicht auf private Members von SetBorder zugreifen muss.
Friend Deklarationen
friend class ClassName;
nicht
friend class ClassName();
ClassName() ist ein Konstuktoraufruf.
Hast du ein
#include "setborder.h"
in setborder_colorstyle.h?
Original geschrieben von anda_skoa
friend class ClassName();
ClassName() ist ein Konstuktoraufruf.
Nein,ein Syntaxfehler :).
Wundert mich das dort der Compiler nicht gemeckert hat.
BLUESCREEN3D
30-07-2003, 13:39
Andere Klassen als friend zu deklarieren ist sowieso schlechter Programmierstil AFAIK...
TheDodger
30-07-2003, 13:50
Original geschrieben von anda_skoa
friend class ClassName();
ClassName() ist ein Konstuktoraufruf.
ja, hatte ich auch schon gesehen ... am ergebniss ändert sich aber nicht's
Hast du ein
#include "setborder.h"
in setborder_colorstyle.h?
ja, hab ich
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.