externe Klassendefinition

Gast #4004646
Lesenswert?

Hi, hab nen Klassendefinitionsproblemm.

Hab eine C-Datei mit einer Klasse

myclass.cpp

void myclass::function1() { ... }
void myclass::function2() { ... }

In der myclass.h ist die Funktion definiert:

myclass.h

class myclass {
public:
   void function1();
   void function2();

...
}


in der main.cpp mache ich:

#include "myclass.h"
myclass Meineklasse;

Nun kann ich von überall mit
Meineklasse.function1();
die Funktion aufrufen.

nun hab ich ne dritte Datei - nennen wir sie

dritte.cpp

von dort möchte ich nun auf Meineklasse zugreifen, die in der main.cpp 
deklariert wurde. Bei einfachen Variablen hat das immer mit extern 
funktioniert.

Ich weis nun nicht, wie ich in dritte.cpp die Klasse Meineklasse 
deklarieren soll. Das geht nicht:

dritte.cpp
#include "myclass.h"
extern myclass Meineklasse;

und ich kapier nicht, warum das nicht geht.
#4004858
Lesenswert?

C_Banker schrieb:

> nennen wir sie

bitte nicht.
Poste deinen echten Quelltext. Denn Fehler können zb auch in einer 
falschen Schreibweise (Gross/Kleinschreibung) stecken. Aus Erfahrung: 
sowas sieht man selbst nur sehr schlecht, während andere es sofort 
sehen.

Übrigens:
WEnn du dein Objekt sowieso als globales Objekt ansehen willst, dann ist 
es keine so gute Idee, in jedes cpp File eine extern Deklaration 
einzubauen.

Mach die extern Deklaration ins Header File
myclass.h
1
class myclass {
2
public:
3
  void function1();
4
  void function2();
5
...
6
};
7

8
extern myclass Meineklasse;

und z.B. in myclass.cpp die Objektdefinition
myclass.cpp
1
#include "myclass.h"
2

3
myclass Meineklasse;
4

5
void myclass::function1()
6
{
7
  ...
8
}
9

10
void myclass::function2()
11
{
12
  ...
13
}

dann hast du automatisch aus allen anderen cpp Files, welche myclass.h 
includieren, Zugriff auf das globale Objekt.
Gast #4004995
Lesenswert?

C_Banker schrieb:
> Bei einfachen Variablen hat das immer mit extern funktioniert.

Hoffentlich machst du nicht gewohnheitsmäßig alles Mögliche global ... 
;-)

> nun hab ich ne dritte Datei - nennen wir sie
> dritte.cpp
> von dort möchte ich nun auf Meineklasse zugreifen

Kann es sein, dass du bereits in C programmiert hast (ich komme nur 
darauf, weil du sozusagen in Dateien denkst, nicht in Klassen)?

Aber zur Sache: Warum willst du die Instanz von myclass global machen? 
Wenn du in einer anderen Klasse auf eine Instanz von myclass zugreifen 
musst, übergebe das Objekt doch der entsprechenden Methode als 
Parameter. Oder übergebe sie einem Konstruktur der anderen Klasse (als 
Referenz, Zeiger oder shared_ptr).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren