#define,#ifndef,#endif...
-
Guten Morgen ihr Nachtschwärmer

Nun wo fange ich denn mal an.
Ich "versuche" was neues zu lernen. Nämlich den Umgang mit den Präprozessordirektiven (#define,#endif,#ifndef,...)
Damit ich die Klassendefinitionen nicht in einer Datei habe sondern sie etwas übersichtlicher gestalten kann.Aber ich komme nicht weiter.
Ich bin echt verzweifelt. Hoffe ihr könnt mir helfen.
//klasse.h #include <iostream> class ort1 { public: int getY() const; int getX() const; void aendern(int x, int y); ort1(); private: int XKoordinate, YKoordinate; }; /* INLINE - IMPLEMENTIERUNG */ inline int ort1::getY() const { return YKoordinate; } inline int ort1::getX() const { return XKoordinate; } inline void ort1::aendern(int x, int y) { XKoordinate = x; YKoordinate = y; std::cout << "Ort1-Objekt wurde geändert!\n" << "x = " << XKoordinate << '\n' << "y = " << YKoordinate << '\n'; }//main.cpp #include <iostream> #include "klasse.h" int main(int argc, char** argv) { ort1 Object; std::cout << Object.getX(); }Nun, ich weiß nicht was ich falsch mache. Aber es kommen ständig die 2 Fehler, mit denen ich kaum was anfangen kann

Fehler 1 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall ort1::ort1(void)" (??0ort1@@QAE@XZ)" in Funktion "_main". main.obj
Fehler 2 fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
Mache ich da was falsch mit den Prä....direktiven?
Mentras
-
In deinem Code benutzt du kein einziges
define,ifndefoderendif. Dein Problem hat auch überhaupt gar nichts mit dem zu tun. Wieso dann die Erklärung am Anfang und dieser Titel?Dein Problem ist ganz einfach, du hast einen Konstruktor deklariert aber nicht definiert. Es fehlt die Definition deines Standardkonstruktors in
ort1.Grüssli
-
du musst den konstruktor
ort1();definieren

-
Ach verdammt

Tut mir Leid, ich Dussel hab da was vergessen.
Können wir wieder von neu beginnen?^^
Also,Hier die Klasse:
//klasse.h #include <iostream> class ort1 { public: int getY() const; int getX() const; void aendern(int x, int y); ort1::ort1() { XKoordinate = 0; YKoordinate = 0; } private: int XKoordinate, YKoordinate; }; /* INLINE - IMPLEMENTIERUNG */ inline int ort1::getY() const { return YKoordinate; } inline int ort1::getX() const { return XKoordinate; } inline void ort1::aendern(int x, int y) { XKoordinate = x; YKoordinate = y; std::cout << "Ort1-Objekt wurde geändert!\n" << "x = " << XKoordinate << '\n' << "y = " << YKoordinate << '\n'; }//main.cpp #include <iostream> #ifndef klasse_h #define klasse_h #endif int main(int argc, char** argv) { ort1 Object; std::cout << Object.getX(); }Jetzt sind´s allerdings mehr fehler. Da ich nicht an die Member bzw auf die Klasse ort1 zugreifen kann.
€dit:
Nagut, die Fehler beheben sich wenn ich statt dem #ifndef.... Kram nur #include "klasse.h" einsetze.
Aber wieso? Was mach ich denn falsch?Lg Mentras
-
Lies am Besten mal ein paar Artikel zu Defines. Was du da gemacht hast ist total blödsinnig.
Mit #include bindest du deine Klassen Header Datei ein. Da du das nicht gemacht hast, konntest du auch nicht auf die Klasse zugreifen. Logisch oder?
Die defines die du in die main.cpp eingefügt hast, werden normalerweise als Header Guards benutzt.
//klasse.h #ifndef KLASSE_H #define KLASSE_H #include <iostream> class ort1 { public: int getY() const; int getX() const; void aendern(int x, int y); ort1::ort1() { XKoordinate = 0; YKoordinate = 0; } private: int XKoordinate, YKoordinate; }; /* INLINE - IMPLEMENTIERUNG */ inline int ort1::getY() const { return YKoordinate; } inline int ort1::getX() const { return XKoordinate; } inline void ort1::aendern(int x, int y) { XKoordinate = x; YKoordinate = y; std::cout << "Ort1-Objekt wurde geändert!\n" << "x = " << XKoordinate << '\n' << "y = " << YKoordinate << '\n'; } #endif
-
Mit #include bindest du deine Klassen Header Datei ein. Da du das nicht gemacht hast, konntest du auch nicht auf die Klasse zugreifen. Logisch oder?
Logisch, dessen war ich mir bewusst. Die Frage war eher an die Präprozessordirektiven gerichtet. Was sich natürlich durch deine Hilfe erledigt hatte

Werde mir ein paar Artikel durchlesen.
Danke für deine Hilfe! (Hat funktioniert)Lg Mentras