Fehler den ich nicht verstehe: LNK2019
-
Abend,
hab mir eigentlich vorgenommen hier nicht zu posten.
Aber da mir der Fehler schon heute zum 2. Mal in die Quere kommt, bin ich gezwungen hier zu fragen. Und wer nicht fragt, der bleibt dumm...^^Beim ersten Mal, hab ich es irgendwie geschafft, den Fehler zu beseitigen >.>
Leider kann ich mich nicht erinnern wie ich es geschafft habe...Schade.Also:
Fehler 1 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall menge::anzeigen(void)" (?anzeigen@menge@@QAEXXZ)" in Funktion "_main". main.obj
Fehler 2 fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
Die Fehler tretten auf, wenn ich in der main.cpp ein Objekt erstelle.
//IntMenge.cpp #include <vector> #include <iostream> #include "IntMenge.h" std::vector<int> mengen_v; //Globaler Vector int zaehler = 0; //Globale Zählvariable inline void inkrement(int& zaehler) { zaehler++; } inline void menge::hinzufuegen(int el) { if(menge::isMember(el) == false) { mengen_v.push_back(el); inkrement(zaehler); std::cout << "\nErfolgreich!" << std::endl; } else std::cout << "\nIst vorhanden!" << std::endl; } inline bool menge::isMember(int el) { for(unsigned int i=0; i < mengen_v.size();i++) { if(mengen_v.at(i) == el) return true; else return false; } } inline void menge::entfernen(int el) { if(menge::isMember(el) == false) { for(unsigned int i=0; i < mengen_v.size(); i++) { if(mengen_v.at(i) == el) { std::cout << "\nErfolgreich gelöscht!" << std::endl; mengen_v.erase(mengen_v.begin()+i-1); } } } else std::cout << "\nElement nicht vorhanden!" << std::endl; } inline size_t menge::size() { std::cout << "\nAnzahl der Elemente: "; return mengen_v.size(); } inline void menge::anzeigen() { for(unsigned int i=0; i < mengen_v.size(); i++) std::cout << mengen_v.at(i) << " , "; std::cout << std::endl; } inline void menge::loeschen() { mengen_v.clear(); std::cout << "\nAlle Elemente erfolgreich gelöscht!" << std::endl; } inline int menge::getMax() { menge::maximum = mengen_v.at(0); for(unsigned int i=0; i < mengen_v.size(); ++i) { if(menge::maximum < mengen_v.at(i)) menge::maximum = mengen_v.at(i); else i++; } std::cout << "\nDas groesste Element ist: " << menge::maximum << std::endl; return menge::maximum; } inline int menge::getMin() { menge::minimum = mengen_v.at(0); for(unsigned int i=0; i < mengen_v.size(); ++i) { if(menge::minimum > mengen_v.at(i)) menge::minimum = mengen_v.at(i); else i++; } std::cout << "\nDas kleinste Element ist: " << menge::minimum << std::endl; return menge::minimum; }//IntMenge.h #ifndef INTMENGE_H #define INTMENGE_H class menge { public: void hinzufuegen(int el); //Element >>el<< hinzufügen, falls es noch nicht existiert, andernfalls nichts tun. void entfernen(int el); //Element >>el<< entfernen, falls es vorhanden ist, andernfalls nichts tun. bool isMember(int el); //Gibt an, ob >>el<< in der Menge enthalten ist. size_t size(); //Gibt die Anzahl der gespeicherten Elemente zurück. void anzeigen(); //Gibt alle Elemente auf der Standardausgabe aus. void loeschen(); //Alle Elemente löschen. int getMax(); //Getter int getMin(); //Getter private: int maximum; //Maximum der vorhandenen Elemente int minimum; //Minimum der vorhandenen Elemente }; #endif//main.cpp #include "IntMenge.h" #include <iostream> int main(int argc, char** argv) { menge o; o.anzeigen(); }Hoffentlich guckt sich jemand den Thread an,... *daumendrück*
Wäre euch zutiefst dankbar!
Lg Mentras
-
Entfern mal die
inlines. Es gibt hier absolut keinen Grund für sie.Ausserdem sollte jede Klasse ihren eigenen Container haben und nicht einen globalen teilen. Vielleicht sollen ja mal mehrere unabhängige Mengen erstellt werden. Und was bringt die Funktion
inkrement()genau?
-
Hmmmm, lag an den Inlines. Sollte mir das Kapitel noch einmal durchlesen.
Danke dir Nexus. Hat geklappt!
€dit:
Von Containern hab ich nur was gehört,... kenn mich da noch nicht aus.
Die Funktion inkrement... jo. Etwas sinnlos^^Lg
-
Und schau dir noch mal genau die Funktion 'isMember' an bzgl. der return-Anweisungen.
Und bzgl. Container: damit ist "vector<int> mengen_v" gemeint. Mach diesen zu einem Member der Klasse 'menge'.
P.S.: vermeide möglichst ein 'denglisch', nimm besser gleich nur englisch für deine Methoden und Member...
-
Th69 schrieb:
P.S.: vermeide möglichst ein 'denglisch', nimm besser gleich nur englisch für deine Methoden und Member...
Guter Tip.
Aber wie lautet die Begründung dafür?
-
Th69 schrieb:
P.S.: vermeide möglichst ein 'denglisch', nimm besser gleich nur englisch für deine Methoden und Member...
Bei uns würde es heissen "Amtssprache ist DEUTSCH". Dennoch wird get, set, is verwendet, weil viele Codegeneratoren und -analysatoren (speziell in Java) das verlangen. Echt gruselig manchmal.
Sorry for OT

-
Th69 schrieb:
Und bzgl. Container: damit ist "vector<int> mengen_v" gemeint. Mach diesen zu einem Member der Klasse 'menge'.
Ohh! Danke

Werde ich mal gleich ausprobieren.