[C++ Error] mathe.h(9): E2459 VCL style classes must be constructed using operator new



  • Mein Problem ist diese Fehlermeldung:
    [C++ Error] mathe.h(9): E2459 VCL style classes must be constructed using operator new

    hab aber keinen blassen Schimmer was die zu bedeuten hat. Was soll ich mit new erstellen grrr... mein source bis jetzt

    #include <math.h>
    //==============================================
    class CLogik
    {
     public:
      CLogik(){ergebniss="";ergebnisz=0;};
      ~CLogik(){};
      AnsiString const ausgabes(){return ergebniss;};
      long int const ausgabez(){moeglichkeiten(Form1->Edit1);return ergebnisz;};
     private:
      AnsiString ergebniss;
      long int ergebnisz;
      void moeglichkeiten(TEdit edit);
    };
    //==============================================
    void CLogik::moeglichkeiten(TEdit edit)
    {
     int i,laenge,anzahl=0;
     AnsiString textfeld;
     textfeld=edit.Text;
     laenge=textfeld.Length();
     for (i=0;i<laenge-1;i++)
      if (textfeld[i]==*" ") anzahl++;
     ergebnisz=pow(4,anzahl);
    };
    

    und wie ich es aufrufe

    CLogik *rechne = new CLogik;
    long int a;
    a=rechne->ausgabez();
    //Memo1->Lines->Add(IntToStr(a));
    //MessageBox(IntToStr(a));
    delete rechne;
    

    thx for help



  • er will wohl das TEdit mit new erzeugt haben bzw als zeiger übergeben, welches du der funktion moeglichkeiten(TEdit edit) übergibst!

    steht aber eigentlich in der fehlermeldung beschrieben....



  • du musst einen Zeiger von TEdit in deiner Funktion übergeben, also

    void moeglichkeiten(TEdit *edit)
    

    (bei beiden)

    außerdem ist der Zugriff auf die Text-Eigenschaft des Edits in C++ mit -> und nicht mit .

    AnsiString beginnt IMMER bei 1, d.h. deine for-Schleife ist nicht korrekt

    was soll if (textfeld[i]==*" ") ?



  • danke, liegt tatsächlich an der Definition von dem Editfeld. 🙂

    hier umgeschrieben, wenn mal eben blind ist 🙂

    #include <math.h>
    //==============================================
    class CLogik
    {
     public:
      CLogik(){ergebniss="";ergebnisz=0;};
      ~CLogik(){};
      AnsiString const ausgabes(){return ergebniss;};
      long int const ausgabez(){moeglichkeiten(Form1->Edit1);return ergebnisz;};
     private:
      AnsiString ergebniss;
      long int ergebnisz;
      void moeglichkeiten(TEdit *edit);
    };
    //==============================================
    void CLogik::moeglichkeiten(TEdit *edit)
    {
     int i,laenge,anzahl=0;
     AnsiString textfeld;
     textfeld=edit->Text;
     laenge=textfeld.Length();
     for (i=0;i<laenge-1;i++)
      if (textfeld[i]==*" ") anzahl++;
     ergebnisz=pow(4,anzahl);
    };
    

    great thx



  • das mit der forschleife ist mir auch grad aufgefallen, das *" " ist so dumm wie es kling einen zeiger den er akzeptiert. ich vergleiche da lediglich auf leerzeichen 🙂
    apropos zugriff auf die eigenschaften, das geht auch mit ., die definition dieht nur anderster aus, jedenfalls funktionierts in visual c++ so 🙂

    thx


Log in to reply