friend problem :(
-
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.
-
Hast du diesen Beitrag mal durchgelesen?
asc schrieb:
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é
btw - der compiler sagt normalerweise auch dazu, WO er den Fehler entdeckt hat.
PS: Und wenn du noch zehnmal die selbe Meldung schreibst, erhöht sich dadurch nicht der Informationsgehalt
