Klassen verwirren mich!
-
CAusgabe Ausgabe;
ist im Header falsch so.
mache daraus im Headerextern CAusgabe Ausgabe;
und in der main.cpp
CAusgabe Ausgabe;
- dann sollte iirc gehn.
PS: der fehler hat nichts, aber auch gar nichts mit klassen zu tun.
-
"Variablen oder Funktionen der Speicherklasse extern teilen dem Compiler mit, dass ihre Definition in einem anderen Modul (Quellcode-Datei) erfolgt als im aktuellen. D.h. als extern deklarierte Daten belegen zunächst einmal keinen Speicherplatz, sondern erst bei ihrer Definition in einem anderen Modul. ..."
-
Leider funktioniert das nicht so...
Habe jetzt folgendes:main.cpp
#include "file.h" #include "ausgabe.h" CAusgabe Ausgabe; { ... Ausgabe.bspfunc(); }
Wenn ich jetzt in file.h
extern CAusgabe Ausgabe;
definiere erhalte ich verschiedene Fehlermeldungen, wie z.B. 'int Ausgabe' : redefinition
Wenn ich es in file.cpp mache gibt es noch mehr Fehler.atzplzw
-
Setze mal einen include-Schutz bei der Header-Datei ein, Muster:
#ifndef _NAMEDESHEADERS_H_ #define _NAMEDESHEADERS_H_ //... #endif
-
Erhard Henkes schrieb:
Setze mal einen include-Schutz bei der Header-Datei ein, Muster:
#ifndef _NAMEDESHEADERS_H_ #define _NAMEDESHEADERS_H_ //... #endif
Das Muster ist schlecht. Namen die mit einem Unterstrich gefolgt von einem Großbuchstaben beginnen, gehören der Implementation.
Also den Unterstrich lieber weglassen.
Z.B:
#ifndef NAME_DER_KLASSE_H__INCLUDED #define NAME_DER_KLASSE_H__INCLUDED ... #endif
-
HumeSikkins schrieb:
#ifndef NAME_DER_KLASSE_H__INCLUDED
Das ist aber auch nicht viel besser.
-
Daniel E. schrieb:
Das ist aber auch nicht viel besser.
Grund?
-
17.4.3.1.2
Jeder Name, der einen doppelten Unterstrich (__) enthält, oder einen mit einem Unterstrich gefolgt von einem Großbuchstaben beginnt, ist der Implementation reserviert. Außerdem ist jeder Name, der mit einem Unterstrich beginnt im globalen Namensbereich und im Namensbereich ::std für die Implementierung reserviert.
-
Daniel E. schrieb:
HumeSikkins schrieb:
#ifndef NAME_DER_KLASSE_H__INCLUDED
Das ist aber auch nicht viel besser.
Ups. Mein Fehler. Ich habe mal wieder meinen Kopf statt den Standard befragt.
-
Ich hab ja echt keine Ahnung wovon Ihr da so alle sprecht, aber ich hab mein Problem so gelöst:
ausgabe.h
class CAusgabe { bspfunc(); }; extern CAusgabe Ausgabe;
file.cpp
#include "ausgabe.h" CAusgabe Ausgabe; Ausgabe.bspfunc();
Wenn ich dann in main.cpp
Ausgabe.bspfunc();
benutze muss ich es nicht mehr definieren. Es funktioniert einfach so, der Compiler beschwert sich auch nicht.
Es ist mir auch echt egal ob das Standard ist oder nicht hauptsache das Programm läuft...atzplzw