Visualizzazione dei risultati da 1 a 6 su 6

Discussione: file .cpp .h

  1. #1

    file .cpp .h

    ese1.cpp
    codice:
    #include <stdio.h>
    #include <iostream>
    #include "ese.h"
    
    
    int main(int argc, char **argv)
    {
    ese A = ese(2,2);
    }

    ese.h
    codice:
    #include <iostream>
    #include <cmath>
    
    class ese
    {
    private:
        int R = 0;
        int C = 0;
    public:
        ese(int,int);
    
    
    
    };
    
    ese(int rows,int cols)
      {
    
        R = rows;
        C = cols;
        
      }



    Sono nuovo nel linguaggio c++, quindi sicuramente l'errore sarà banale ma non riesco a risolverlo. Mi da : |error: expected ')' before ',' token| nella riga ese(int rows,int cols). Come risolvo? Grazie in anticipo

  2. #2
    1. In tutti gli standard C++ precedenti al C++11 (che ancora non è molto diffuso) non è consentito inizializzare i campi di una classe in quel modo. Il modo corretto di inizializzare campi di una classe è dal costruttore, tramite la sintassi dell'initialization list, oppure tramite assegnamento diretto, come stai già facendo nel costruttore.
    In sintesi: togli "=0" dopo le dichiarazioni di R e C, tanto comunque sono valori che vengono sovrascritti dal costruttore (che viene necessariamente eseguito).
    2. Quando definisci un metodo della classe al di fuori del blocco class, devi specificare a che classe si riferisce tramite la sintassi nomeclasse::nomemetodo (altrimenti il compilatore non sa a che classe ti stai riferendo); ergo, modifica la definizione del costruttore in:
    codice:
    ese::ese(int rows,int cols)
    {
        R = rows;
        C = cols;
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Probrema risolto, grazie mille. SOlo che ora mi sono di nuovo bloccato senza sapere cosa sbaglio.


    ese1.cpp
    codice:
    #include <stdio.h>
    #include <iostream>
    #include "ese.h"
    
    
    int main(int argc, char **argv)
    {
    ese A = ese(2,4);
    
    A.SetVal(0,0,0);
    A.SetVal(0,1,1);
    A.SetVal(0,2,0);
    A.SetVal(0,3,1);
    A.SetVal(1,0,-1);
    A.SetVal(1,1,0);
    A.SetVal(1,2,-1);
    A.SetVal(1,3,0);
    
    A.Stampa();
    
    }


    ese.h
    codice:
    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    class Ese
    {
    private:
        int R;
        int C;
        int i,j;
        double **ese;
    public:
        Ese(int,int);
        ~Ese(void);
        void SetVal(int,int,double);
        int	Stampa(void);
    
    };
    
    Ese::Ese(int rows,int cols)
      {
    
        // create a Matrix object with given number of rows and columns
        R = rows;
        C = cols;
        double **ese = new double*[R];
        for(int i = 0; i<R; ++i){
            ese[i] = new double[C];
            }
    
      }
    
    
    Ese::~Ese(void)
    {
    for(i=0; i<R; i++) {
          delete(ese[i]);
       }
       delete(ese);
    
    }
    
    
    void Ese::SetVal(int r, int c,double V)
    {
    	ese[r][c] = V;
    }
    
    
    int Ese::Stampa(void)
    {
             for(i = 0; i < R; i++)
            {
                    for(j = 0; j < C; j++)
                    {
                            cout << "[" << ese[i][j] << "] ";
                    }
                    cout << '\n'; // o cout << end;
            }
    }

    Errori di compilazione non ci sono, ma quando faccio build e run, parte l'exe ma smette subito di funzionare. Sapete dirmi il perchè? Grazie in anticipo!

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    O lanci l'applicazione direttamente dal terminale oppure metti un'istruzione che blocca l'esecuzione fino all'intervento dell'utente. Nel forum se ne è parlato fino alla nausea, prova a cercare
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    ahahah, scusa ma non mi sono spiegato bene. Quando parte l'exe mi da: "ese1.exe ha smesso di funzionare" e va in crash il porcesso. Perchè???

  6. #6
    Trattandosi di array, la deallocazione non si fa con delete, ma con delete[].
    codice:
    Ese::~Ese(void)
    {
        for(i=0; i<R; i++)
            delete[] ese[i];
       delete[] ese;
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.