Header-Problem

cesupa

Erfahrenes Mitglied
Hallo,

ich hab da mit dem wxDevcpp ein kleines Problem mit Headern: Ich hab im einem Projekt eine Klasse namens profile.h geschrieben, die ich in zwei .cpp Dateien einbinde, wenn ich das Projekt kompiliere kommt immer dieser Fehler:

multiple definition of `load_profiles_path(std::string*)'
first defined here
multiple definition of `load_profile(char*, s_profile*)'
first defined here
multiple definition of `save_profile(char*, s_profile*)'
first defined here

Die profile.h Klasse hab ich gegen Mehrfach-Deklaration geschützt:

Code:
#ifndef PROFILE_H
#define PROFILE_H

#include <fstream>
#include <windows.h>
using namespace std;

//...Code...

#endif

Die Klasse binde ich dann so in die 1. .cpp Datei ein:

(Mail_prog1Frm.cpp)
Code:
#include "Mail_prog1Frm.h" //Klasse der 1. .cpp Datei
#include "newprofile.h" //Klasse der 2. .cpp Datei
#include <iostream>
#include "profile.h"
using namespace std;

2. .cpp Datei:

(newprofile.cpp)
Code:
#include "newprofile.h"
#include <fstream>
#include "profile.h"
using namespace std;

Wie kann demnach besagter Fehler entstehen?

Danke schon mal für eure Hilfe.

Gruß
cesupa
 
Hallo,

das sieht mir eher nach einem Linker Problem aus...

Kann es sein das du die Objektdatei in der die Methoden load_profiles_path,
load_profile und save_profile definiert sind mehrfach zu deiner Applikation hinzu
linkst?

Gruß

RedWing
 
Hi.

Kann es sein, das du die Funktion(en) in der Header Datei definiert hast? In Header Dateien gehören nur Deklarationen - keine Definitionen (außer inline Funktionen natürlich).

D.h. zur profile.h Datei sollte es noch eine profile.cpp Datei geben wo die Funktionen definiert sind.

Gruß

PS: Und in Header Dateien gehört auf keinen Fall ein "using namespace std" da das unabsehbare Folgen für andere Dateien hat die diesen Header verwenden.
 
Okay, ich hab die Funktionen aus der Header-Datei ("profile.h") in eine seperate .cpp Datei gepackt, jetzt erhalte ich aber einen Fehler in der Mail_prog1Frm.cpp, dass die Funktion 'load_profiles_path' undeklariert sei, obwohl profile.h inkludiert ist.

Gruß
cesupa
 
Hast du denn die Funktionen in der Header Datei dann auch deklariert?

C++:
// profile.h
#ifndef PROFILE_H
#define PROFILE_H

int meine_funktion(int, int);

#endif
C++:
// profile.cpp

#include "profile.h"

int meine_funktion(int param1, int param2) {
  ...
}
Gruß
 
Habs jetzt so gemacht und dann bekomme ich einen Linker-Error:

[Linker error] undefined reference to `Mail_prog1Frm::WxButton1Click(wxCommandEvent&)'
ld returned 1 exit status

Code:
void Mail_prog1Frm::WxButton1Click1(wxCommandEvent& event)
{
	string s[256];
	
	load_profiles_path(s);
	MessageBox(0,s[0].c_str(),"",0);
}

Gruß
cesupa
 
Ah, hab das problem gefunden, vielleicht sollte ich das nächste mal die '1' hinter 'Click' entfernen! :-)

Danke für eure Hilfe!

Gruß
cesupa
 
Zurück