Stringarray einer klasse initialisieren??



  • Hallo

    class MyEx
    {
      public:
       MyEx(int errornumber)
       {
        m_errnr = errornumber;
       }
      private:
       int m_errnr;
       const string failuretext[3];
    };
    
    string MyEx::failuretext={"Test","Hallo","Sie"};
    

    er sagt mir, das Bezeichner MyEx failuretext mehrfach deklariert ist!
    stimmt ja, aber wie kann ich den string initialisieren??



  • Entweder im Konstruktor, wie bei nonstatischen Membern eigentlich üblich, oder Du machst die Konstante static.



  • hab mir erstmal über ein dynamisches array geholfen....aber

    class MyEx
    {
      public:
       MyEx(int errornumber)
       {
        failuretext = new string[3];
        failuretext[0] = "Division durch Null";
        failuretext[1] = "Integerüberlauf";
        failuretext[2] = "Integerunterlauf";
        m_errnr = errornumber;
       }
       ~MyEx(){delete[] failuretext;}
       const string What()
       {
        return failuretext[m_errnr];
       }
      private:
       int m_errnr;
       string *failuretext;
    };
    
    int test(int a)
    {
     if(a == 0)
      throw MyEx(0);
     else if(a == 1)
      throw MyEx(1);
      else if (a == 2)
      throw MyEx(2);
     else
      throw MyEx(10);
    
    }
    
    int main(int argc, char* argv[])
    {
      try
      {
       test(3);
      }
      catch(MyEx& exc)
      {
       cout<<exc.What();
      }
      getch();
      return 0;
    }
    //---------------------------------------------------------------------------
    

    jetzt zeigt er mir nix an, aber das fenster schließt sofort!
    wieso?

    getch() am ende steht

    wenn ich test mit 0 aufrufe, kommen viele lustige zeichen auf dem bildschirm!

    wo liegt also der fehler??

    btw, die frage mit dem "konstanten" initialisieren des stringarrys steht noch!



  • Und ich antworte Dir gerne nochmal:

    Du musst die Konstante static machen, dann geht es wie von Dir oben gedacht.
    Non-static musst Du die Konstante wie jedes andere Member initialisieren, im Konstruktor der Klasse.

    EDIT:

    Falsch

    class MyEx {
    private:
      int m_errnr;
      const string failuretext[3];
    };
    string MyEx::failuretext={"Test","Hallo","Sie"};
    

    Richtig

    class MyEx {
    private:
      int m_errnr;
      static const string failuretext[3];
    };
    string MyEx::failuretext={"Test","Hallo","Sie"};
    

    Auch Richtig

    class MyEx {
    public:
      MyEx() { failuretext[0]="Test"; failuretext[1]="Hallo"; ... }
    private:
      int m_errnr;
      const string failuretext[3];
    };
    

Log in to reply