Pagina 2 di 3

Re: programma in c++,accesso alle funzioni

Inviato: giovedì 8 maggio 2014, 11:22
da 1001001
seven speed [url=http://forum.ubuntu-it.org/viewtopic.php?p=4578868#p4578868][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:grazie davvero per il supporto e sto seguendo il tuo consiglio,ovvero cerco di studiare qualcosa di c++ un po meglio.mi interesserebbe sapere qualcosa di piu sull'esistenza del tipo list,sul web ho trovato molto poco,ma sarebbe fondamentale per il mio programma..
Il tipo list non è una cosa che si possa trattare in un post di poche righe, ci sarebbe un mare di cose da dire :)
qua trovi tutte le informazioni: http://www.cplusplus.com/reference/list/list/?kw=list
C'è una spiegazione del tipo in generale e l'elenco di tutti i metodi possibili, ciascuno con spiegazione del funzionamento e parametri in ingresso e in uscita..si danno però per "scontate" alcune cose appartenenti alle basi generali del C++, ad esempio la conoscenza degli iteratori

Se poi hai ancora domande (magari un po' più specifiche :) ) chiedi pure!

Re: programma in c++,accesso alle funzioni e gestione lista

Inviato: lunedì 12 maggio 2014, 13:14
da seven speed
dopo piu d un weekend(da giovedi mattina)passato interamente sul c++ sono giunto finalmente ad aver eun programma decente.mi rimane un erroe,che da quant ho capito su internet dovrebbe essere questione di standard o compilatore.adesso ve lo posto per avere un parere piu chiaro(ed in italiano).
vi posto il main e le due classi,lasciando fuori l'implementazioni delle funzioni che sono lunghe e non mi creano problemi:

Codice: Seleziona tutto

#include <iostream>
#include <cmath>
#include <list>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#define M 2
#define N 50

using namespace std;

class input{

public:
double a[2];
double b[2];
double toll1;
double dati[][M];
int n;
public:
//metodi
void proiezionepuntoretta (double xa, double ya, double xp, double yp, double h, double v, double *asc, double *ord, double *coord);
double isconvesso (double p3[]);
int calcolaindicelatotriangolo(int iterazione);
double distanzapunti(double x1, double y1,double x2, double y2);
void risolvi(double xp, double yp,double xa, double ya,double h, double v, double hs, double vs, double*t, double*s);

    input(double punto1[],double punto2[],double toll)
    {
        int i;
        toll1=toll;
         for(i=0;i<2;i++)
          {
            a[i]=punto1[i];
            b[i]=punto2[i];
          }
    }

    input(double seg1[2],double seg2[2],double toller,double matrix[3][2],int nn)
    {
        int i,j;
        for(i=0;i<2;i++)
          {
            a[i]=seg1[i]=0;
            b[i]=seg2[i]=0;
          }
          toll1=toller=0;
          for(i=0;i<3;i++)
          {
            for(j=0;j<2;j++)
            {
                dati[i][j]=matrix[i][j];
            }
          }
    }

    input(double toll){
     int i;
     for(i=0;i<2;i++)
     {
         a[i]=0;
         b[i]=0;
     }
    }
};

class output{

public:

char mex[N];
double x,y;
int indice;
public:
list<output> polixseg(input);

};

int main()
{
   input t(double,double,double[3][2],double,int);
   output ris;
   cout<<ris.polixseg(t({3,20},{1,16},0.5,{4,3},{21,3},{4,20},3));***
   return 0;
}
mi vien dato un errore e 5 warning alla riga che ho asteriscato,cioè la penultima:

|83|warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]|
|83|warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]|
|83|warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]|
|83|warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]|
|83|warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]|
|83|error: cannot convert ‘<brace-enclosed initializer list>’ to ‘double’ for argument ‘1’ to ‘input t(double, double, double (*)[2], double, int)’|
||=== Build finished: 1 errors, 5 warnings ===|


sapete aiutarmi?

Re: programma in c++,accesso alle funzioni e gestione lista

Inviato: lunedì 12 maggio 2014, 15:52
da 1001001
Per quanto riguarda i warning, sono dovuti al fatto che le liste di inizializzazione con le parentesi graffe sono presenti solo nell'ultima versione dello standard C++, quindi i compilatori un po' vecchi richiedono il passaggio di una flag (nello specifico -std=c++11 nel tuo caso) per attivare le funzionalità del nuovo standard. In soldoni, compila con:

Codice: Seleziona tutto

g++ main.cpp -std=c++11
e i warning scompaiono.

Per quanto riguarda l'errore:

Codice: Seleziona tutto

input t(double,double,double[3][2],double,int);
cosa stai cercando di fare con questa istruzione?

E

Codice: Seleziona tutto

cout<<ris.polixseg(t({3,20},{1,16},0.5,{4,3},{21,3},{4,20},3));***
questo t e quello dell'istruzione sopra dovrebbero essere la stessa variabile/funzione/qualunque cosa tu intendess? :)

In ogni caso, per far funzionare la stampa tramite cout dovrai implementare il metodo operator<< nella classe output

Re: programma in c++,accesso alle funzioni e gestione lista

Inviato: lunedì 12 maggio 2014, 16:21
da seven speed
innanzi tutto un GRAZIE immenso per l'aiuto,dul c++ non so proprio dove andare perchè ho notato che rispetto al c su internet c'è molta meno roba...

1)andando nelle opzioni codeblocks(il mio IDE) in compiler non trovo alcuna voce come quella che mi hai postatpo e che mi viene segnalat nell'errore..avrò una versione troppo vecchia di codeblocks?(10.05)
2)con l'istruzione ch emi hai postata sto dichiarando la variabile t di tipo input e con i parametri indicati(che richiamano l'apposito costruttore nella classe input).
3)come faccio ad implementare il metodo operator?

Re: programma in c++,accesso alle funzioni e gestione lista

Inviato: lunedì 12 maggio 2014, 17:21
da seven speed
per il problema 1) ho risolto ;) mancano gli altri due punti :)
ps.comunque si,quel t è la stessa variabile ;)

Re: programma in c++,accesso alle funzioni e gestione lista

Inviato: lunedì 12 maggio 2014, 23:17
da 1001001
Il problema 1) immagino che si riferisca alla flag di compilazione, giusto? :)

Per quanto riguarda il 2):
seven speed ha scritto:2)con l'istruzione ch emi hai postata sto dichiarando la variabile t di tipo input e con i parametri indicati(che richiamano l'apposito costruttore nella classe input).
No, non stai facendo questo :) almeno per due motivi:
1) se vuoi chiamare una funzione in C++ devi passargli degli argomenti, non dei tipi
2) non c'è nessun costruttore della classe input che prende in ingresso quei tipi in quell'ordine
Quello che stai facendo con quell'istruzione è dichiarare una funzione (locale alla funzione main) che prende in ingresso 5 argomenti (double,double,double[3][2],double,int) e restituisce un oggetto di tipo input


Per il punto 3): http://stackoverflow.com/questions/4421 ... verloading oppure http://www.learncpp.com/cpp-tutorial/93 ... operators/

Re: programma in c++,accesso alle funzioni e gestione lista

Inviato: martedì 13 maggio 2014, 0:26
da seven speed
ma io vorrei dichiarare una variabile di tipo input,con tutti gli attributi della classe input..come dovrei fare allora?
ho cambiato l'ordine dei parametri,era una svista,seguendo il costruttore ma da lo stesso errore
per il punto 3) non conoscendo bene l'inglese non sono sicuro di aver capito cosa fare...potresti darmi una spiegazione veloce?

Re: programma in c++,accesso alle funzioni e gestione lista

Inviato: martedì 13 maggio 2014, 13:34
da 1001001
Quando crei un oggetto di un certo tipo, tutti i suoi attributi vengono creati, qualunque costruttore tu chiami. Diversi costruttori possono fare cose diverse, dipende da come li implementi, ma se non dici esplicitamente come creare un certo attributo verrà chiamato il costruttore di default per costruirlo.
Detto questo, i costruttori, come tutte le funzioni, devi chiamarli passando oggetti del tipo appropriato. Nel tuo caso, devi passare un array di double di 2 elementi , un altro array di double di due elementi, un double, un array doppio di double di dimensione 3x2 e un intero, ma devi passare oggetti di questo tipo, non i tipi...se no, come fa poi a usare quegli oggetti per fare le operazioni nel costruttore?

Per il punto 3), devi fare una funzione di nome operator<< con la firma che trovi in quei due link che ti ho postato che fa la stampa. Questo forse è più di quanto ti serva però in effetti..se non vuoi poter stampare su file oltre che su standard output, potresti fare una funzione di nome ad esempio print che stampa quello che vuoi stampare su cout. Il fatto è che mentre i singoli attributi magari possono essere stampati (e non sempre, dipende da quale tipo hanno questi oggetti), di certo non puoi stampare un oggetto composto, perché C++ non sa come fare se tu non fai una funzione che fa la stampa come vuoi che sia fatta. Il modo più generale per fare questa cosa è attraverso overloading dell'operatore, ma anche con una funzione "normale" (come la print di cui ti dicevo sopra) si può fare

Re: programma in c++,accesso alle funzioni e gestione lista

Inviato: martedì 13 maggio 2014, 19:02
da seven speed
ma non ho capito,è sbagliato il costruttore(a parte l'ordine delle variabili che ho cambiato) o la chiamata?
perchè se nella chiamata della funzione polixseg nel cout(che modificherò dopo come hai detto tu) scrivo:

Codice: Seleziona tutto

cout<<ris.polixseg({3,20},{1,16},0.5,{{4,3},{21,3},{4,20}},3);
mi da comunque errore:
Modelli/fineprogetto/main.cpp||In function ‘int main()’:|
Modelli/fineprogetto/main.cpp|84|error: no matching function for call to ‘output::polixseg(<brace-enclosed initializer list>, <brace-enclosed initializer list>, double, <brace-enclosed initializer list>, int)’|
Modelli/fineprogetto/main.cpp|84|note: candidate is:|
Modelli/fineprogetto/main.cpp|75|note: std::forward_list<output> output::polixseg(input)|
Modelli/fineprogetto/main.cpp|75|note: candidate expects 1 argument, 5 provided|
||=== Build finished: 4 errors, 0 warnings ===|

Re: programma in c++,accesso alle funzioni e gestione lista

Inviato: martedì 13 maggio 2014, 19:04
da jigen45
La chiamata.
1001001 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4581825#p4581825][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:[...] i costruttori, come tutte le funzioni, devi chiamarli passando oggetti del tipo appropriato. Nel tuo caso, devi passare un array di double di 2 elementi , un altro array di double di due elementi, un double, un array doppio di double di dimensione 3x2 e un intero, ma devi passare oggetti di questo tipo, non i tipi...se no, come fa poi a usare quegli oggetti per fare le operazioni nel costruttore?

Re: programma in c++,accesso alle funzioni e gestione lista

Inviato: martedì 13 maggio 2014, 22:06
da 1001001
Che poi, con l'istruzione

Codice: Seleziona tutto

cout<<ris.polixseg(t({3,20},{1,16},0.5,{4,3},{21,3},{4,20},3));
cosa vorresti fare? Cioè ok, vuoi stampare l'output di ris.polixseg, ma quella t che hai messo nell'argomento di polixseg cosa dovrebbe essere nelle tue intenzioni?

Re: programma in c++,accesso alle funzioni e gestione lista

Inviato: martedì 13 maggio 2014, 22:30
da seven speed
ma se do:

Codice: Seleziona tutto

cout<<ris.polixseg({3,20},{1,16},0.5,{{4,3},{21,3},{4,20}},3);
mi da errore(l'errore è quello del post precedente,infatti avevo sbagliato mettere il codice,la t non ci andava....)non riesco proprio a capire...

Re: programma in c++,accesso alle funzioni e gestione lista

Inviato: martedì 13 maggio 2014, 22:32
da seven speed
1001001 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4582172#p4582172][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Che poi, con l'istruzione

Codice: Seleziona tutto

cout<<ris.polixseg(t({3,20},{1,16},0.5,{4,3},{21,3},{4,20},3));
cosa vorresti fare? Cioè ok, vuoi stampare l'output di ris.polixseg, ma quella t che hai messo nell'argomento di polixseg cosa dovrebbe essere nelle tue intenzioni?
sisi la t è un errore che non avevo fatto nel programma ma solo quando ho riposrtato nel post il codice ;)

Re: programma in c++,accesso alle funzioni e gestione lista

Inviato: mercoledì 14 maggio 2014, 12:11
da 1001001
seven speed [url=http://forum.ubuntu-it.org/viewtopic.php?p=4582196#p4582196][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:ma se do:

Codice: Seleziona tutto

cout<<ris.polixseg({3,20},{1,16},0.5,{{4,3},{21,3},{4,20}},3);
mi da errore(l'errore è quello del post precedente,infatti avevo sbagliato mettere il codice,la t non ci andava....)non riesco proprio a capire...
Certo, perché il metodo polixseg prende in ingresso un oggetto di tipo input, non double[2], double[2], double, double[3][2], int ;)
quello che prende in ingresso questi oggetti è il costruttore della classe input e quei parametri li devi passare quando costruisci t, se ho capito quello che vuoi fare...poi polixseg lo chiami su t

Re: programma in c++,accesso alle funzioni e gestione lista

Inviato: giovedì 15 maggio 2014, 10:53
da seven speed
risolto,adesso li non ci sono più problemi,devo solo pensare alla stampa.stasera vedo di concludere

Re: programma in c++,accesso alle funzioni e gestione lista

Inviato: giovedì 15 maggio 2014, 15:15
da seven speed
adesso non mi da piu errori di sintassi ma mi stampa valori casuali...penso che l'errore sia nell'implementazione della stampa:

Codice: Seleziona tutto

void output::printlist(forward_list<output> ou){


    cout<<"punto:("<<x<<","<<y<<")\n"<<"indice:"<<indice<<"\n"<<"messaggio:"<<mex<<"\n";
}
il mio dubbio è:dovrei estrarre(come?)un elemento dalla lista prima di stamparlo?

Re: programma in c++,accesso alle funzioni e gestione lista

Inviato: giovedì 15 maggio 2014, 16:02
da 1001001
Ma le variabili x, y, indice e mex da dove escono?

Re: programma in c++,accesso alle funzioni e gestione lista

Inviato: giovedì 15 maggio 2014, 16:24
da seven speed
nel cout...penso infatti che ho sbagliato proprio qui...

Re: programma in c++,accesso alle funzioni e gestione lista

Inviato: giovedì 15 maggio 2014, 17:38
da 1001001
Eh sì, ho capito, ma nella funzione, per come l'hai scritta, quelle variabili non sono state dichiarate, quindi dovrebbe neanche compilare..

Re: programma in c++,accesso alle funzioni e gestione lista

Inviato: giovedì 15 maggio 2014, 19:43
da seven speed
ragazzi risolto adesso funziona tutto :D :D :D :D