Benötige Hilfe bei der Benutzung einer Variable der eigenen Klasse



  • Hallo Leute,

    ich schreib schon seit längerem an benutzerdefinierten Klassen ...
    Jetz mein Problem, ich hab zwei Klassen, eine ist ganz normal und hat ein paar Variablen, die andere soll jetzt eine eigene Variable vom typ der ersten Klasse haben. Das Problem tritt auf, wenn ich die Klassen in zwei verschiedenen Header-Dateien habe. Hier mal Anschaulicher:

    Datei KLASSE1.h

    class KLASSE1 {
        int a, b;
    };
    

    Datei KLASSE2.h

    class KLASSE2 {
    :warning:  KLASSE1 ab;     //Problem besteht hier
        int c;
    };
    

    Hoffe das ist ausführlich genug, bei Fragen stehe ich gerne zur Verfügung ...

    Gruß Simon



  • In der Source-File von KLASSE2 #include "KLASSE1.h" (Oder wie die Datei heißt) schreiben.

    Aber du musst dabei die Include-Guards beachten, sonst gibts multiple-definition Fehler.



  • Hallo

    private, public

    Mfg.
    way


  • Administrator

    1. "Problem besteht hier" oder "Ein Problem tritt auf" sind keine Fehlerbeschreibungen.
    2. Ich nehme mal an, der Kompiler meckert, dass er die Klasse nicht kennt, dann fehlt das folgende:

    // Klasse1.hpp
    
    #ifndef KLASSE_1_HEADER_GUARD_94373
    #define KLASSE_1_HEADER_GUARD_94373
    
    class Klasse1
    {
      int a, b;
    };
    
    #endif // KLASSE_1_HEADER_GUARD_94373
    
    // Klasse2.hpp
    
    #ifndef KLASSE_2_HEADER_GUARD_443573
    #define KLASSE_2_HEADER_GUARD_443573
    
    #include "Klasse1.hpp"
    
    class Klasse2
    {
      Klasse1 test;
    };
    
    #endif // KLASSE_2_HEADER_GUARD_443573
    

    Was ein Header Guard ist, darüber solltest du dich am besten gleich auch informieren.
    3. Leg dir ein anständiges C++ Buch zu, das sind absolute Grundlagen:
    - C++ Primer
    - Thinking in C++ 1&2

    Grüssli



  • Hallo Leute,

    Danke für die Antworten.
    das mit dem Header Guard kenn ich schon, und hab es auch in beiden Headern verwendet. Ich hab auch den Header der Klasse1 included.

    Aber ich versteh nicht ganz, was way mit public, private meint, weil ich komm ja erst garnicht soweit, dass ich die Member "a" und "b" benutzen kann.

    Ich bekomme die Meldung

    'KLASSE1' was not declared in this scope
    

    ps. entschuldigung für die schlechte Beschreibung, aber ich weis einfach nicht mehr weiter, ich hoffe ihr wollt mir trotzdem noch helfe

    Gruß Simon



  • way schrieb:

    Hallo

    private, public

    Mfg.
    way

    Ach, way... "private class" oder was? 😃


  • Administrator

    varginator schrieb:

    Ich bekomme die Meldung

    'KLASSE1' was not declared in this scope
    

    *sigh*
    Und wo genau?
    Hast du deine Fehlermeldung so lieb, dass du sie nicht mit uns teilen willst? 😃

    Vielleicht hilft dir das hier weiter:
    http://cplusplus.syntaxerrors.info/index.php?title=‘bar’_was_not_declared_in_this_scope

    Vor allem der Fehler ganz unten 😉

    Grüssli



  • Hallo

    Ach, way... "private class" oder was? 😃

    Nä!

    Mfg.
    way



  • way schrieb:

    Nä!

    Aber dir ist bewusst, dass das Problem rein gar nichts mit private oder public zu tun hat?



  • Nexus schrieb:

    way schrieb:

    Nä!

    Aber dir ist bewusst, dass das Problem rein gar nichts mit private oder public zu tun hat?

    Ist ihm nicht. Zumindest wäre es mir neu dass er auch nur irgendwas von dem versteht was hier gepostet wird.

    Ich tippe übrigens auf folgendes Problem:

    Klasse1.hpp inkludiert Klasse2.hpp und Klasse2.hpp inkludiert Klasse1.hpp
    Wenn das der Fall ist, ist die notwendige Lösung eine Foward Deklaration.



  • Hallo

    Aber dir ist bewusst, dass das Problem rein gar nichts mit private oder public zu tun hat?

    Jo, habe ich etwa behauptet, es getan zu haben?

    Mfg.
    way



  • way schrieb:

    Aber dir ist bewusst, dass das Problem rein gar nichts mit private oder public zu tun hat?

    Jo, habe ich etwa behauptet, es getan zu haben?

    Jo, das hast du implizit, indem du deine Antwort zu einer Frage hier reingestellt hast! Vorausgesetzt, mit dieser im Kontext seltsamen Formulierung meinst du, was ich denke...



  • main.cpp

    #include <iostream>
    #include "Klasse2.h"
    
    using namespace std;
    
    int main()
    {
        cout << "Hello world!" << endl;
        return 0;
    }
    

    Klasse1.h

    #ifndef KLASSE1_H_INCLUDED
    #define KLASSE1_H_INCLUDED
    
    class Klasse1
    {
    };
    
    #endif // KLASSE1_H_INCLUDED
    

    Klasse2.h

    #ifndef KLASSE2_H_INCLUDED
    #define KLASSE2_H_INCLUDED
    
    #include "Klasse1.h"
    
    class Klasse2
    {
        Klasse1 k1;
    };
    
    #endif // KLASSE2_H_INCLUDED
    

    Process terminated with status 0 (0 minutes, 0 seconds)
    0 errors, 0 warnings



  • Hallo liebe Helfer,

    danke für die vielen Antworten.
    Shade of Mine hat mir die richtige Lösung beschrieben, aber auch noch danke an alle, die, wenn auch genervt, meine Frage versucht haben zu verstehen und geantwortet haben.

    Ich habe eine Datei, in der alle Header includiert werden, die ich brauche, und diese Datei wird auch in jeder einzelnen dieser Dateien includiert, weil ich öfters auf alle übergreifen muss (in beide Richtungen).

    Ich bitte nochmal um Entschuldigung, weil ich mein Problem nicht gescheid beschrieben habe.

    Gruß Simon


Anmelden zum Antworten