fehler beim linken!?
-
also gestern hatte ich schonma mein problem angesprochen, doch leider weiß ich mit einer implemntation meiner konstruktoren nichts anzufangen. vielleicht könnte sich jemand das problem anschauen.
gruß daniel
#include <iostream> #include <vector> using namespace std; class Ziffern2ZahlWandler { public: Ziffern2ZahlWandler(); Ziffern2ZahlWandler(vector<char>); void eingabe(char ziffernzeichen); void definiere(vector<char> ziffernfolge); long double get_zahl(); long double ziffernvector_zahl(vector<char> ziffernfolge, int position); private: char ziffernzeichen; vector<char> ziffernfolge; long double zahl; long double ziffernzahl; }; //inline Methoden inline Ziffern2ZahlWandler::Ziffern2ZahlWandler(vector<char> zf) : ziffernfolge(zf) {}; //globale Funktionsprototypen long double mache_zahl(char ziffernzeichen);
#include "char_ziffer.h" #include <iostream> #include <vector> using namespace std; long double mache_zahl(char z) { long double zahl = static_cast<long double>(z) - static_cast<long double>('0'); return zahl; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// long double Ziffern2ZahlWandler::get_zahl() { return zahl; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void Ziffern2ZahlWandler::eingabe(char zz) { while(true) { cin.get(zz); if(zz != 'e') ziffernfolge.push_back(zz); else break; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void Ziffern2ZahlWandler::definiere(vector<char> zf) { zf = ziffernfolge; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// long double Ziffern2ZahlWandler::ziffernvector_zahl(vector<char> zf, int pos) { zf.erase(zf.begin(), zf.begin()+pos); //löscht die ersten n elemente eines vectors bool is_nega; if(zf.size() > 1) is_nega = ((zf[0] == '-')? true : false); if(!isdigit(zf[0])) zf.erase(zf.begin(), zf.begin()+1); int i; bool is_deca = false; for(i = 0; i < zf.size() && isdigit(zf[i]) || zf[i] == 'e' || zf[i] == '.'; i++) { if(zf[i] == '.') { is_deca = true; i += 1; } } int j = 0; while(j < zf.size()) { if(isdigit(zf[j])) zahl = zahl * 10 + mache_zahl(zf[j]); ++j; if(!isdigit(zf[j])) break; } while(i < zf.size() && is_deca == true) { if(isdigit(zf[i])) { long double temp = mache_zahl(zf[i]); temp = temp / 10; zahl =+ temp; } if(!isdigit(zf[i])) break; } if(is_nega) zahl *= (-1); return zahl; }
#include <cstdlib> #include <iostream> #include "rechner.h" #include "char_ziffer.h" using namespace std; int main(int argc, char *argv[]) { Ziffern2ZahlWandler o; system("PAUSE"); return EXIT_SUCCESS; }
mache bekomm ich:
c:\Dokumente und Einstellungen\dGrat\Eigene Dateien\Visual Studio-Projekte\gtr-sim\char_ziffer.cpp(47): warning C4018: '<' : Konflikt zwischen signed und unsigned c:\Dokumente und Einstellungen\dGrat\Eigene Dateien\Visual Studio-Projekte\gtr-sim\char_ziffer.cpp(56): warning C4018: '<' : Konflikt zwischen signed und unsigned c:\Dokumente und Einstellungen\dGrat\Eigene Dateien\Visual Studio-Projekte\gtr-sim\char_ziffer.cpp(62): warning C4018: '<' : Konflikt zwischen signed und unsigned gtr-sim error LNK2019: Nicht aufgeloestes externes Symbol "public: __thiscall Ziffern2ZahlWandler::Ziffern2ZahlWandler(void)" (??0Ziffern2ZahlWandler@@QAE@XZ), verwiesen in Funktion _main gtr-sim fatal error LNK1120: 1 unaufgeloeste externe Verweise
warum???
-
Implementiere den Standardkonstruktor.
-
ja, wie? zeig doch ein bsp, plz! im buch musste ich nie einen standartkonstruktor implementieren, die klasse soll ja nur ein paar fkt. bereitstellen, ich dachte da sind die inline fkt. hinreichend...
-
Streich den Standardkonstruktor doch einfach asu der Klassendeklaration dann benötigst du ih nauch nicht, aber wenn du schreibst:
// Ausschnitt aus Ziffern2ZahlWandler Ziffern2ZahlWandler();
Dann muss da auch irgendwo eine Definition hin.
MfG SideWinder
-
omni schrieb:
int main(int argc, char *argv[]) { Ziffern2ZahlWandler o; }
Da braucht er ihn
Wahrscheinlich aber nicht wirklich, also übergib dort dann die Parameter.
-
achso, jetzt weiß ich was falsch ist, ich dachte das ein normaler standartkonstruktor nicht weiter beachtet werden brauch.
-
hat jemand vielleicht verbesserungsvorschläge? der restliche code ist umfangreicher, da wollt ich mall ein paar sachen übertragen.
-
Aus
if(zf.size() > 1) is_nega = ((zf[0] == '-')? true : false);
würd ich
if(zf.size() > 1) is_nega = ((zf[0] == '-')? true : false ? true : false ? true : false ? true : false ? true : false ? true : false);
machen und aus
((((is_deca == true) == true) == true) == true)
-
@omni: Ich denke du hast Default-Konstruktor mit Standard-Konstruktor verwechselt
Und nicht auf Hrhr hören
MfG SideWinder
-
jaja, sarkasmus, die sprache schwacher geister... :p