tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
552
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    cibal_gina cibal_gina ist offline Mitglied
    Registriert seit
    Oct 2004
    Beiträge
    14
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
          #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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
         #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
    Geändert von cibal_gina (25.05.05 um 16:16 Uhr)
     

  2. #2
    Flegmon Flegmon ist offline Mitglied Brokat
    Registriert seit
    Aug 2004
    Beiträge
    351
    Zitat Zitat von cibal_gina

    Code :
    1
    2
    3
    4
    5
    6
    
       void Sparse::initSparse() {
        [COLOR=Green] val_Sparse = new double[m_Z][/COLOR];  // Hier ist bei mir Zeile 29.
         for( unsigned int i = 0; i < m_Z; i++ ) {
        [COLOR=Red]val_Sparse[i] = new double;[/COLOR]
         }
       }
    Warum 2mal new? Das erste mal ( new double[m_Z] ) reicht aus.
     

  3. #3
    cibal_gina cibal_gina ist offline Mitglied
    Registriert seit
    Oct 2004
    Beiträge
    14
    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"
     

  4. #4
    Flegmon Flegmon ist offline Mitglied Brokat
    Registriert seit
    Aug 2004
    Beiträge
    351
    Zitat Zitat von cibal_gina
    dort in Zeile 29 das new weggenommen habe
    ich meinte das Rot markierte new (in der Schleife)
     

  5. #5
    cibal_gina cibal_gina ist offline Mitglied
    Registriert seit
    Oct 2004
    Beiträge
    14
    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)
     

  6. #6
    Flegmon Flegmon ist offline Mitglied Brokat
    Registriert seit
    Aug 2004
    Beiträge
    351
    wenn du das andere new und die Schleife weggenommen hast, müsste das so aussehen:

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

    Dann hat sich Zeile 29 verschoben, wo ist sie dann?
     

  7. #7
    cibal_gina cibal_gina ist offline Mitglied
    Registriert seit
    Oct 2004
    Beiträge
    14
    Momentan sieht es so aus:
    Code :
    1
    2
    3
    4
    5
    6
    
             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"
     

  8. #8
    Flegmon Flegmon ist offline Mitglied Brokat
    Registriert seit
    Aug 2004
    Beiträge
    351
    Code :
    1
    2
    3
    
               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.
     

  9. #9
    cibal_gina cibal_gina ist offline Mitglied
    Registriert seit
    Oct 2004
    Beiträge
    14
    Ah
    Alles klar.
    So funktioniert es

    Vielen Dank für Deine Hilfe
     

Ähnliche Themen

  1. Konstruktor mit Übergabe eines Wertes
    Von voelzi im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 21.11.09, 21:05
  2. Filterung eines Arrays
    Von Paula im Forum PHP
    Antworten: 4
    Letzter Beitrag: 19.04.06, 13:38
  3. größe eines arrays
    Von Pherseus im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 13.12.05, 10:00
  4. größe eines arrays
    Von shrewm im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 26.11.04, 15:50
  5. [C++] vergrößerung eines arrays
    Von Tobias K. im Forum C/C++
    Antworten: 9
    Letzter Beitrag: 19.11.03, 10:35