init funktion verständnis problem
-
Hallo ich habe ein Verständnis Problem und bräuchte einen Denkanstoss:
class XmlConfig { public: XmlConfig(); bool initialize(); private: TiXmlDocument doc; }; bool XmlConfig::initialize() { doc("exmlfile"); // No match for call to (TiXmlDocument) (const char [9]) if(!doc.LoadFile()){ return false;} return true; }Das object doc ist ein TinyXml Document:
tinyxml.h:
class TiXmlDocument : public TiXmlNode { public: /// Create an empty document, that has no name. TiXmlDocument(); /// Create a document with a name. The name of the document is also the filename of the xml. TiXmlDocument( const char * documentName ); ... usw.Ich würde das document gerne mit der init funktion 'initialisieren' um innerhalb meiner Klasse damit zu arbeiten.
Geht irgendwie net!?
-
Was geht nicht? Was gibts für einen Fehler?
-
der hier:
No match for call to (TiXmlDocument) (const char [9])
-
doc = TiXmlDocument("exmlfile");
-
hmm jetzt meckert :
multiple definition of `XmlConfig::initialize()'
wenn ich initialize() ohne angabe der Klasse einsetze kennt er doc wieder nicht mehr.
-
hast du den #include wächter?
#ifndef xml_h_ #define xml_h_ xml_h_ // dein class #endif
-
hmm ich habe die definition via header file weggelassen da es eine ziemlich kleine Klasse wird. Allerdings include ich in einem anderen file die XmlConfig.cpp. Wo muss ich den include wächter benutzen?
-
ich bin sicher das dies mein Problem ist nur ich habe keine Ahnung wie ich das in meinem Fall ( keine Header Datei ) umsetzen soll.
#ifndef XMLCONFIG_cpp_ #define XMLCONFIG_cpp_ XMLCONFIG_cpp_ class class XmlConfig { ... }; #endifhabe ich versucht, keine Änderung.
Muss ich mit einer header Datei arbeiten??
-
Evtl. einen Tipp!?
Ich möchte die oben angegebene Klasse in einer anderen source benutzen.
Ich habe aber keine header datei erstellt, sondern die cpp datei included.
Das nimmt mir der linker über. Wo muss ich den include wächter installieren?
Oder gehts garnicht und ich muss einen header erstellen ??
HILFE
-
Wenn die Klasse sehr klein ist kann man sie auch ganz in den Header packen und da gehören auch die Include-Guards hin.
cpp-Dateien inkludiert man nicht.
-
Braunstein schrieb:
Wenn die Klasse sehr klein ist kann man sie auch ganz in den Header packen und da gehören auch die Include-Guards hin.
cpp-Dateien inkludiert man nicht.Danke!
Ich dachte auch daran aber da ich gehört habe das man in header files keine anderen header included sollte habe ich das nicht getan.
Die Syntax die sich aus dem headerfile ergibt habe ich jetzt so benutzt:
#ifndef XMLCONFIG_h_
#define XMLCONFIG_h_ XMLCONFIG_h_Ist das korrekt?
-
dirkstr schrieb:
Ich dachte auch daran aber da ich gehört habe das man in header files keine anderen header included sollte habe ich das nicht getan.
Hast du auch Argumente gehört? Mir fällt nämlich keins ein.
dirkstr schrieb:
Ist das korrekt?
Wenn sich am Ende deines Headers noch ein
#endiffindet: ja.cheers, Swordfish
-
Swordfish schrieb:
dirkstr schrieb:
Ich dachte auch daran aber da ich gehört habe das man in header files keine anderen header included sollte habe ich das nicht getan.
Hast du auch Argumente gehört? Mir fällt nämlich keins ein.
Ich nehme mal an, dass er wo gelesen hat, dass man, wenn man was includet das wenn möglich in der cpp macht. Aber gegen includen in Headern spricht eigentlich nix.
-
Ich kenne auch die Regel: jedes Header-File sollte so beschaffen sein dass ein .c(pp) File mit folgendem Inhalt fehlerfrei compiliert:
#include "header.hpp"Oder anders: jedes Header File sollte selbst als Source-File compilierbar sein.
Und das erfordert sehr oft sogar dass man andere Header-Files inkludiert, da man mit forward declarations einfach nicht immer auskommt.