Klassen: Funktionen

Sterpfi

Grünschnabel
Ich bin dabei zum ersten Mal eine Funktion in einer Klasse zu benutzen, doch es funktioniert nicht, hier der Code + Error:

classes.h:

Code:
 # ifndef CLASSES_H
# define CLASSES_H
 
class punkt
{
	public:
		int x;
		int y;
};
 
class zug
{
	public:
		punkt start;
		punkt ziel;
		int umwandlung;
};
 
class figur
{
	public:
		int farbe;
		int typ;
		zug zug_moegl[27];
		void zug_suche();
};
 
void figur::zug_suche()
{
	rectangle(20,20,100,100,SCHWARZ,SCHWARZ);
}
 
class brett
{
	public:
		figur feld[8][8];
};
 
# endif

ich denke andere files können nicht am error schuld sein, da ohne die funktion in der klasse alles funktioniert.

Compiler-Error:
zeichne_brett.cpp G:\Eigene Dateien\Maturaarbeit\Programm-Source\zeichne_brett.o(.text+0x0)
multiple definition of `figur::zug_suche(void)'
main.cpp G:\Eigene Dateien\Maturaarbeit\Programm-Source\main.o(.text+0x0)
first defined here


dieser error kommt noch ein paar weitere male vor (bei jeder file, also jedem include)

kann jemand den fehler finden?

//edit: übrigens benutze ich Dev-C++
 
Zuletzt bearbeitet:
moin


Kann es sein das du die Header irgendwo doppelt includierst?

Außerdem gehört:
Code:
void figur::zug_suche()
{
rectangle(20,20,100,100,SCHWARZ,SCHWARZ);
}
In eine extra cpp Datei, ob das der Fehler ist weiss ich jedoch nicht.


mfg
umbrasaxum
 
umbrasaxum hat gesagt.:
moin


Kann es sein das du die Header irgendwo doppelt includierst?

Außerdem gehört:
Code:
void figur::zug_suche()
{
rectangle(20,20,100,100,SCHWARZ,SCHWARZ);
}
In eine extra cpp Datei, ob das der Fehler ist weiss ich jedoch nicht.


mfg
umbrasaxum

dass doppelt includieren sollte ja mit
Code:
 # ifndef CLASSES_H
# define CLASSES_H
...
# endif
ausgeschlossen sein... das verlegen der funktion in eine .cpp-datei hat nix gebracht.
 
Das doppelt includen wird nur innerhalb eines Moduls durch die #ifdef #define #endif Konstruktion ausgeschlossen (wäre auch anderst sinnlos, denn sonst würden die Definitionen, die im Headerfile zur bereitgestellt werden, nur einem Modul zur Verfügung stehen). Also wird der Code 2mal interpretiert, wenn er von 2 verschiedenen .cpps aus includest, was zur Folge hat, dass figur::zug_suche 2 Definitionen besitzt und der Linker nicht entscheiden kann, welche er nehmen soll. In die Headers gehören daher in größeren Projekten Deklarationen, die Definitionen in Cpps und Libs. Ausnahme: Templates
 
Zurück