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


Anmelden zum Antworten