Probleme mit dem VS 2008



  • Hi!

    Im Linux Compiler funkt der Code, aber wieso nicht im VS 2008 ?
    Wo liegen hier die Probleme ?
    Bekomme folgende Fehlermeldungen:

    run.cpp(108) : warning C4996: 'ctime': This function or variable may be unsafe. Consider using ctime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
    c:\programme\microsoft visual studio 9.0\vc\include\time.inl(88): Siehe Deklaration von 'ctime'
    run.cpp(143) : error C2533: 'ReverseText::{ctor}': Ergebnistyp für Konstruktoren nicht zulässig
    run.cpp(185) : error C2264: 'ReverseText::ReverseText': Fehler in der Funktionsdefinition oder Funktionsdeklaration, Funktion nicht aufgerufen

    Code:

    #include <iostream>
    #include <string>
    #include <time.h>
    #include <algorithm>
    
    using namespace std;
    
    class SomeText {
    public:
        virtual string getText() = 0;
        virtual ~SomeText();
    };
    
    SomeText::~SomeText()
    {
    }
    
    //--------------------------------------------
    // Fixer Text
    
    class FixedText : public SomeText {
        string txt;
    public:
        FixedText(string s);
        virtual string getText();
    };
    
    FixedText::FixedText(string s)
        : txt(s)
    {
    }
    
    string FixedText::getText()
    {
        return txt;
    }
    //--------------------------------------------
    // Dekorator - auf Länge l auffüllen/kürzen
    
    class FilledText : public SomeText {
        SomeText& st;
        int len;
    public:
        FilledText(SomeText& t, int l);
        virtual string getText();
    };
    
    FilledText::FilledText(SomeText& t, int l)
        : st(t), len(l)
    {
    }
    
    string FilledText::getText()
    {
        string s = st.getText();
        int l = s.length();
        if (l >= len)
    	return s.substr(0, len);
        else
    	return s + string(len-l, ' ');
    }
    //--------------------------------------------
    // Dekorator -  um N Stellen verschoben
    
    class ShiftedText : public SomeText {
        SomeText& st;
        unsigned int offset;
    public:
        ShiftedText(SomeText& t, unsigned int o);
        virtual string getText();
    
        void setOffset(unsigned int o);
    };
    
    ShiftedText::ShiftedText(SomeText& t, 
    			 unsigned int o)
        : st(t), offset(o)
    {
    }
    
    string ShiftedText::getText()
    {
        string s = st.getText();
        unsigned int o = offset % s.length();
        return s.substr(offset) +  s.substr(0, o);
    }
    
    void ShiftedText::setOffset(unsigned int o)
    {
        offset = o;
    }
    //--------------------------------------------
    // Text mit aktuellem Datum und Uhrzeit
    
    class DateText : public SomeText {
    public:
        DateText();
        virtual string getText();
    };
    
    DateText::DateText()
    {
    }
    
    string DateText::getText()
    {
        time_t now = time(0);
        string t = ctime(&now);
        // \n am ende entfernen
        return t.substr(0, t.length()-1); 
    }
    //--------------------------------------------
    // DekorText-Beginn
    class DekorText:public SomeText
    {
      string links;
      SomeText& mitte;
      string rechts;
    public: 
      DekorText(const char*, SomeText&, const char*);
      virtual string getText();
    };
    
    DekorText::DekorText(const char* l, SomeText& m, const char* r)
    :links(l), mitte(m), rechts(r)
    {
    }
    
    string DekorText::getText()
    {
      return links + mitte.getText() + rechts;
    }
    //--------------------------------------------
    class ReverseText:public SomeText
    {
      SomeText& text;
    public: 
      ReverseText(SomeText&);
      virtual string getText();
    }
    
    ReverseText::ReverseText(SomeText& s)
    :text(s)
    {
    }
    
    string ReverseText::getText()
    {
    	string t = text.getText();
    	reverse(t.begin(), t.end());
    	return t;
    }
    
    void show(const char* what, SomeText& st, 
    	  char delimiter = '\n')
    {
    	DekorText dt("[[" , st , "]]");
    	cout << what  << ":" << dt.getText() << delimiter;
    }
    
    void show60(ShiftedText& st)
    {
        for(int i=0; i < 60; i++) {
    	st.setOffset(i);
    	_sleep(1000); // Windows: _sleep(1000);
    	show(" ", st, '\r');
    	cout.flush();
        }
        cout << "\n";
    }
    
    //--------------------------------------------
    int main()
    {
        FixedText fix("Hello World");
        show("fix", fix);
    
        FilledText filled(fix, 60);
        show("filled", filled);
    
        ShiftedText shifted(filled, 10);
        show("shifted 10", shifted);
    
    	ReverseText rt(shifted);
    	show("reverse", rt);
    
        DateText dt;
    	DekorText ddt("#", dt, "#");
        FilledText filleddate(ddt, 60);
        ShiftedText shifteddate(filleddate, 0);
        show60(shifteddate);
    	system("pause");
    }
    

    Bitte um Hilfe! Danke!

    lg



  • hm... die Fehler sind mir ein Rätsel.

    ich würde dir einfach mal raten statt Referenzen Zeiger zu verwenden,
    auch wenn ich pessimistisch bin, dass das hilft.

    MfG DrakoXP



  • ; am Ende der Klassendefinition von ReverseText vergessen.



  • Nach der Klassendeklaration fehlt in Zeile 140 ein Semikolon, das dürfte die Fehler beheben.



  • Arg, so dumm muss man sein 😃
    Danke!

    lg



  • EDIT:zu langsam.. 🙂

    Mich wundert es mehr, dass das mit einem anderen Compiler geht.. 🙄
    Oder hast du den Fehler nachträglich eingebaut?!



  • Wahrscheinlich einen Fehler nachträglich eingebaut 😉

    lg


Anmelden zum Antworten