Forum: Mikrocontroller und Digitale Elektronik externe Klassendefinition


von C_Banker (Gast)


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.

von Klaus W. (mfgkw)


Lesenswert?

C_Banker schrieb:
> Das geht nicht:
>
> dritte.cpp
> #include "myclass.h"
> extern myclass Meineklasse;

Wie muß man sich "Das geht nicht" vostellen?

- du traust dich nicht, das zu schreiben? Warum nicht?
- irgendein Priester oder Immam hat es für Blasphemie erklärt? Warum?
- Der Compiler akzeptiert es nicht? Mit welcher Meldung?

von Klaus W. (mfgkw)


Lesenswert?

komplette Quelltexte wären übrigens hilfreich, etwas ähnliches wie 
deinen Quelltext hier zu posten ist Unsinn.
Am Ende der obigen Klasse fehlt ein Semikolon.
Auch ohne deine dritte.cpp wird es so nicht funktionieren.

von Karl H. (kbuchegg)


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.

von Halbbildaustaster (Gast)


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).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.