Konstruktor mit eindimensionalen Array initalisieren



  • Hi

    Kann man einen Konstruktor in dieser Art intialisieren ?

    class matrix
    {
    std::valarray<double> v;
    
    public:
    
    matrix(double a[8])
    {
    std::valarray<double> h
    for (int i=0;i<=9;i++)
             h[i]=a[i];
             v=h;
    }
    };
    

    Dann in der Main Funktion:

    matrix m(1,2,3,4,5,6,7,8,9);
    

    Das ist die Fehlermeldung :

    [C++ Fehler] Unit1.cpp(27): E2285 Keine Übereinstimmung für 'matrix::matrix(double)' gefunden

    MfG
    Fleedo



  • Ein Array, das du übergibst, wird intern einfach nur als ein einziger Zeiger behandelt, klar, dass du dann keine 8 Argumente übergeben kannst.

    Verwende doch einfach einen std::vector<double>. 🙂

    ChrisM



  • Ja, wie wäre es denn mit std::vector:

    #include <iostream>
    #include <vector>
    
    class matrix
    {
    private:
      int m_length;
      std::vector<double> m_vector;
    protected:
    public:
      matrix(int len, double* d)
      {
        m_length = len;
        for(int i=0; i<len; ++i)
          {
            m_vector.push_back(d[i]);
          }
      };
    
      ~matrix()
      {
      };
    
      matrix(const matrix& m)
      {
        this->m_vector = m.m_vector;
        this->m_length = m.m_length;
      };
    
      void show(std::ostream& out) 
      {
        std::vector<double>::iterator iter;
    
        for(iter = m_vector.begin(); iter < m_vector.end(); ++iter)
          {
            out << *iter << std::endl;
          }
      };
    
    };
    
    int main()
    {
      double d[] = {1,2,3,4,5,6,7,8};
      matrix ma = matrix( 8, d );
      matrix mb = matrix( ma );
    
      mb.show( std::cout );
      return 0;
    }
    


  • HI

    Danke euch beiden. Ich probiers so !!!

    C U
    Fleedo


Anmelden zum Antworten