Konstruktor eines Arrays

cibal_gina

Grünschnabel
Hi !

Ich möchte mir in einer Klasse Sparse einen Konstruktor erstellen, welcher ein array von double Elementen speichert.
Ich habe mir eine Klasse sparse erstellt.
In sparse.h steht folgendes:
Code:
      #ifndef SPARSE_H
      #define SPARSE_H
      #include <iostream>
      using namespace std;
      class Sparse {
       public:
        Sparse( const unsigned int z );
        
       private:
        void initSparse();
        double * val_Sparse;
        unsigned int m_Z;
      };
      #endif
In sparse.cc folgendes:
Code:
     #include "sparse.h"
     Sparse::Sparse(  const unsigned int z) {
       m_Z = z;	// steht für die Anzahl der Elemente 
       initSparse();
     }
     
     void Sparse::initSparse() {
       val_Sparse = new double[m_Z];
       for( unsigned int i = 0; i < m_Z; i++ ) {
     	val_Sparse[i] = new double;     // Hier ist bei mir Zeile 29.
       }
     }
Nun denke ich, dass mir initSparse einen Array von double Elementen reserviert.
Aber beim Kompilieren (g++ Kompiler) gibt es den Fehler:
"sparse.cc:29: error: cannot convert `double*' to `double' in assignment"
Ich verstehe das nicht warum er da mir meckert.
Weiss einer vielleicht was das Problem ist, wo ich den Denkfehler habe?

Für Hinweise wäre ich sehr dankbar, denn ich komme da nicht weiter :(
 
Zuletzt bearbeitet:
cibal_gina hat gesagt.:
Code:
   void Sparse::initSparse() {
     val_Sparse = new double[m_Z];  // Hier ist bei mir Zeile 29.
     for( unsigned int i = 0; i < m_Z; i++ ) {
   	val_Sparse[i] = new double;
     }
   }

Warum 2mal new? Das erste mal ( new double[m_Z] ) reicht aus.
 
Habs gerade ausprobiert. Und bekomme nachdem ich dort in Zeile 29 das new weggenommen habe folgende Fehlermeldung mit der ich auch nichts anfangen kann, weil alle semikolons und Klammern richtig gesetzt sind:

sparse.cc:29: error: expected primary-expression before "double"
sparse.cc:29: error: expected `;' before "double"
 
Ja, habe mich nur oben im Quellcode vertippt (Zeile 29 ist das von Dir rot markierte), ich hatte schon das richtige rausgenommen.
(Habe es gerade oben korrigiert)
 
wenn du das andere new und die Schleife weggenommen hast, müsste das so aussehen:

Code:
  void Sparse::initSparse() 
   {
     val_Sparse = new double[m_Z];
   }

Dann hat sich Zeile 29 verschoben, wo ist sie dann?
 
Momentan sieht es so aus:
Code:
         void Sparse::initSparse() {
          val_Sparse = new double[m_Z];
          for( unsigned int i = 0; i < m_Z; i++ ) {
        	val_Sparse[i] = double;     // Hier ist bei mir Zeile 29.
          }
        }
mit diesem Fehler:
sparse.cc:29: error: expected primary-expression before "double"
sparse.cc:29: error: expected `;' before "double"
 
Code:
           for( unsigned int i = 0; i < m_Z; i++ ) {
        	val_Sparse[i] = double;     // Hier ist bei mir Zeile 29.
          }

Das kannst du komplett entfernen, dass es so aussieht wie in meinem vorherigen Post.
Oder anstelle von double 0 (NULL) schreiben, damit jedes Element auf 0 gesetzt wird. ;-)
 
Zurück