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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.