friend problem :(
-
Zur Erläuterung: friend "befreundet" Klassen oder Funktionen aber keine Objekte.
Gruß,
Simon2.
-
ok very much thx

doch hab noch ein problem-> wenn ich
class a { private: // bla bla public: friend class b; // bla bla void test() { cout << b.ZZZZZZZ; } //ich will die variable von class b ausgeben }; class b { public: char ZZZZZZZ; // hat nen wert // bla bla };mach,dann geht das natürlich wieder nicht. ich möchte es allerdings ausgeben

lg
-
Ehm eine public Variable kann jeder nutzen(wie public schon sagt ...)
Du solltest evt. mal in a eine Instanz von b erzeugen -.-
-
(D)Evil schrieb:
Ehm eine public Variable kann jeder nutzen(wie public schon sagt ...)
Du solltest evt. mal in a eine Instanz von b erzeugen -.-ja, sry wollte private nutzen, hab mich verschrieben, sry

class a { private: // bla bla public: friend class b; // bla bla void test() { cout << b.ZZZZZZZ; } //ich will die variable von class b ausgeben }; class b { public: // bla private: char ZZZZZZZ; // hat nen wert // bla bla };So ich möchte den Wert in der klasse a von b.ZZZZZZZ ausgeben, aber wie geht das mit der friend class und instanz(dein vorschlag)?
bitte code
LG
-
class bar { private: int data; }; class foo { public: friend class bar; void func() { std::cout << inst.data << std::endl; } private: bar inst; };? Nee ... da kann doch was nicht
Ich weiß auch was ... aber naja find es heraus 
-
class bar { private: int data; }; class foo { public: friend class bar; void func() { std::cout << inst.data << std::endl; } private: bar inst; //hier fehler };aber kannst du mir pls die lösung posten?
lg
-
#include <iostream> class foo; //Forawrd Deklaration, damit in bar friend class foo deklariert werden kann class bar { private: friend class foo; //so rum muss das friend deklariert werden int data; }; class foo { public: void func() { std::cout << inst.data << std::endl; } private: bar inst; //hier kein fehler mehr };Du musst die friend-Deklarationen vertauschen. Das liegt daran, dass die Klasse selber bestimmen kann/können soll, wer auf ihre Daten zugreifen kann/ihr Freund ist.
Felix
-
Ey
Der sollte das rausfinden 
-
ich habs doch die ganze zeit richtig gehabt, nur war das problem, dass ich die Klassen andersrum geschrieben hab

geht das?
-
Offensichtlich geht es nur so rum, wie ich es gepostet habe.
@(D)evil: Sorry

Felix
-
@Phoemuex: Einer Forward-Deklaration von foo bedarf es nicht.
-
Phoemuex schrieb:
#include <iostream> class foo; //Forawrd Deklaration, damit in bar friend class foo deklariert werden kann class bar { private: friend class foo; //so rum muss das friend deklariert werden int data; }; class foo { public: void func() { std::cout << inst.data << std::endl; } private: bar inst; //hier kein fehler mehr };funzt nicht:
error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.bei
// bar.h class bar { private: friend class foo; }; // foo.h class foo { public: private: bar inst; };liebe grüße
-
hi
ich habs noch immer nicht lösen können, was könnte die Ursache für die Fehlermeldung sein?
Die Klassen sind in mehrere Dateien aufgeteilt:
// Klasse FOO: // foo.h class bar { public: // funktionen .. void set(int); private: friend class bar; int any; }; //foo.cpp #include "foo.h" #include < ALLE ANDEREN > void foo::set(int some) { any = some; }// Klasse BAR: // bar.h class bar { public: void ausgabe(); private: foo inst; }; //bar.cpp #include "bar.h" #include < ALLE ANDEREN > void bar::ausgabe() { std::cout << inst.any << std::endl; }// MAIN.CPP: #include "bar.h" #include "foo.h" #include <ALLE ANDEREN, zbsp. iostream,..> int main() { foo haha; haha.set(10); bar test; test.ausgabe(); return 0; }und Fehler ist:
error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
ich hoffe, ihr könnt mir bitte helfen

Mfg
-
hab auch versucht vorher foo zu deklarieren, klappt aber immer noch nicht.
kann mir jemand bitte helfen?

-
Sorry ich hab mich verschrieben, so gehört es richtig:
// Klasse FOO: // foo.h class foo { public: // funktionen .. void set(int); private: friend class bar; int any; }; //foo.cpp #include "foo.h" #include < ALLE ANDEREN > void foo::set(int some) { any = some; }// Klasse BAR: // bar.h class bar { public: void ausgabe(); private: foo inst; }; //bar.cpp #include "bar.h" #include < ALLE ANDEREN > void bar::ausgabe() { std::cout << inst.any << std::endl; }// MAIN.CPP: #include "bar.h" #include "foo.h" #include <ALLE ANDEREN, zbsp. iostream,..> int main() { foo haha; haha.set(10); bar test; test.ausgabe(); return 0; }und Fehler ist:
error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
ich hoffe, ihr könnt mir bitte helfen

Mfg
-
Patrick S. schrieb:
und Fehler ist:
error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
ich hoffe, ihr könnt mir bitte helfen

Mit Sicherheit ist das nicht die Fehlermeldung die du bekommst. Weder die Angabe in welcher Datei noch Zeile steht dort. Dieser Fehler tritt in der Regel bei einer Methode/Funktion auf, bei der, der Rückgabewert nicht angegeben ist. Und auch nur wenn der Compiler recht gnädig ist (wie auch in der Warnung steht):
Beispiel:
class A { public: foo() { /*...*/ } // <-- Angabe des Rückgabewertes vergessen, int angenommen };Sehr häufig passiert das wenn man eine Klasse umbenannt hat, und den Konstruktor vergessen hat ebenso umzubenennen...
cu André
-
das
foo inst;muss falsch sein.
mein konstruktor hat ja eigentlich nur folgenden Inhalt:
KLASSE::KLASSE() { std::cout << "Konstruktor" << std::endl; }sollte doch eh nicht schaden, außerdem hab ich ihn auch ganz verschwinden lassen, trodzdem nichts.
mfg
-
Kann mir bitte jemand helfen?

mfg
-
Nöö nachdem das wieder mal alle deutschsprachigen C++-Foren durchgegangen ist ... in mindestens 1nem die korrekte Lösung stand ... nein!
-
(D)Evil schrieb:
Nöö nachdem das wieder mal alle deutschsprachigen C++-Foren durchgegangen ist ... in mindestens 1nem die korrekte Lösung stand ... nein!
Deviloper komm schon

bittemfg patrick s.