Pagina 1 di 3

[RISOLTO] [C++] Accesso a funzioni e liste

Inviato: sabato 3 maggio 2014, 18:56
da seven speed
ciao ragazzi,sto facendo un programma in c++ per l'università,a dire il vero è il mio primo programma di c++ ed è abbastanza complicato(conosco abbastanza bene il c è sto facendo java,ma sono costretto a fare questo programma,purtroppo senza una preparazione adeguata).
prima di postarvi il codice chè davvero lungo(si parla di circa 700 righe di codice O.o ) voglio farmi una domanda,riguardo un problema diciamo concettuale,per vedere se riesco a risolvere da solo.l'errore che mi viene dato è "undefined reference to.....",da quanto ho capito vorrebbe dire che non riesce ad accedere alla funzione....in effetti io ho fatto questo programma ,cominciando a formare le class(che sono 3) e tenendo tutto in un progetto....potrebbe essere che non legge le classi e quindi le funzioni membro?devo importarle con una include?se si,quale sarebbe la sintassi corretta per includere le 3 classi?

Re: programma in c++,problemi

Inviato: sabato 3 maggio 2014, 20:09
da vaeVictis
Maggio è il mese del controllo gratuito per le palle di vetro.
Posta il codice.
(che compili e/o riproduca l'errore, possibilmente)
:)

Re: programma in c++,problemi

Inviato: sabato 3 maggio 2014, 20:18
da 1001001
Infatti, anche io ho la sfera di cristallo dal gommista...
seven speed [url=http://forum.ubuntu-it.org/viewtopic.php?p=4576370#p4576370][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: [...] prima di postarvi il codice chè davvero lungo(si parla di circa 700 righe di codice O.o ) [...]
Se proprio non vuoi postare il codice intero, almeno un minimal working example:
http://www.sscce.org/

Re: programma in c++,problemi

Inviato: domenica 4 maggio 2014, 11:54
da jigen45
tranquillo, non c'è bisogno di risparmiare, potresti postare tranquillamente il tuo codice :D

Re: programma in c++,problemi

Inviato: domenica 4 maggio 2014, 12:31
da seven speed
vi posto la classe "incriminata"coi due metodi "incriminati".poi ci sarebbe un'atra classe con altri metodi su cui accade qualcosa di simile,ma diciamo che l'errore si ripete....
ovviamente c'è un main,che non fa altro che richiamare le funzioni delle classi e testarle su dei parametri a cui sono assegnati valori(serve solo per provare il programma).spero sia sufficiente a capire dove c'è l'errore ;)

Codice: Seleziona tutto




#include <iostream>
#include <cmath>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#define M 3
#define N 10

class input{

public:
int n;
double a[2];
double b[2];
double toll1;
//metodi
void proiezionepuntoretta (double xa, double ya, double xp, double yp, double h, double v, double *asc, double *ord, double *coord);
void ris(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];
       }

    }


};


void input::ris(double xp, double yp,double xa, double ya,double h, double v, double hs, double vs, double *t, double*s)
{
    /*h=xq-xp;
    v=yq-yp;
    hs=xb-xa;
    vs=yb-ya;*/
   *t=((yp-ya)*hs-vs*(xp-xa))/((h*vs-v*hs));
    if(hs!=0)
        *s=(xp-xa+(*t)*h)/hs;
    else
        *s=(yp-ya+(*t)*v)/vs;

    return;

}

void input::proiezionepuntoretta (double xa, double ya, double xp, double yp, double h, double v, double *asc, double *ord, double *coord) {
/*h=vertice2[0]-vertice1[0];
v=vertice2[1]-vertice1[1];*/
void ris(double xp, double yp,double xa, double ya,double h, double v, double hs, double vs, double*t, double*s);



double s, hperp, vperp;

hperp=-v;
vperp=h;
ris(xp, yp, xa, ya, h, v, hperp, vperp, &(*coord), &s);
*asc=xa+s*hperp;
*ord=ya+s*vperp;

return;

}

Re: programma in c++,problemi

Inviato: domenica 4 maggio 2014, 12:48
da 1001001
seven speed [url=http://forum.ubuntu-it.org/viewtopic.php?p=4576703#p4576703][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: ovviamente c'è un main,che non fa altro che richiamare le funzioni delle classi e testarle su dei parametri a cui sono assegnati valori(serve solo per provare il programma)
Appunto...posta anche il main per favore :) altrimenti chi cerca di aiutarti deve scriverselo da solo per vedere l'errore...e magari non ne ha voglia/tempo ;) il problema infatti, stando a quello che dici nel primo post, non è in fase di compilazione ma in fase di linking (e infatti il file .o viene creato senza problemi, a patto di togliere la chiamata alla funzione risolvi, che immagino sia nella parte di codice che non hai postato) e senza main non c'è niente su cui chiamare il linker

Re: programma in c++,problemi

Inviato: domenica 4 maggio 2014, 15:28
da seven speed
no scusa non c'è alcuna funzione risolvi,ma è solo la funzione ris ;)
nel main queste due funzioni non compaiono per niente.sono due funzioni accessorie,che bengono chiamate in una terza(che in realtà ne chiama anche altre)ed è quest'ultima ad esser eutilizzata nel main...

Re: programma in c++,problemi

Inviato: domenica 4 maggio 2014, 19:09
da 1001001
seven speed ha scritto:...nel main queste due funzioni non compaiono per niente.sono due funzioni accessorie,che bengono chiamate in una terza(che in realtà ne chiama anche altre)ed è quest'ultima ad esser eutilizzata nel main...
insisto che nessuno qui è chiaroveggente... :)

Re: programma in c++,problemi

Inviato: domenica 4 maggio 2014, 22:03
da seven speed
il programma è tutto questo,è davvero lungo..temo che se lo inserisco non lo leggerà nessuno...magari posso inviarmelo in pvt..

Re: programma in c++,problemi

Inviato: lunedì 5 maggio 2014, 12:58
da 1001001
Premesso che, come da regolamento, lo scambio di messaggi privati per fornire aiuto è vietato, un paio di considerazioni (in ordine crescente di generalità):
1) che tu lo posti qua o me lo invii in privato, a me cosa cambia? Intendo, se lo voglio leggere lo leggo comunque, se non lo voglio leggere non lo leggo comunque :)
2) nel caso in cui io non lo voglia leggere o che più semplicemente con tutta la buona volontà del mondo io non sia in grado di aiutarti, se lo posti qua qualcun altro lo può vedere e darti una mano; se me lo invii in privato, non c'è speranza che altri utenti possano aiutarti
3)
temo che se lo inserisco non lo leggerà nessuno
quello che è certo è che se non lo inserisci non lo leggerà nessuno :)
4) chiaramente più il codice è minimale più è facile darti una mano ed è quindi nel tuo interesse ridurre il codice per creare un esempio minimale che riproduca il problema (vedi mio post sopra) e postare quello...ma se proprio non ci riesci, nessuno qui si spaventa per 700 righe di codice, credo...e non sono certo queste 700 righe di codice che saturano la memoria del server che ospita il forum :)

Morale: posta il codice :)

Re: programma in c++,problemi

Inviato: lunedì 5 maggio 2014, 13:09
da jigen45
1001001 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4577284#p4577284][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Premesso che, come da regolamento, lo scambio di messaggi privati per fornire aiuto è vietato, un paio di considerazioni (in ordine crescente di generalità):
1) che tu lo posti qua o me lo invii in privato, a me cosa cambia? Intendo, se lo voglio leggere lo leggo comunque, se non lo voglio leggere non lo leggo comunque :)
2) nel caso in cui io non lo voglia leggere o che più semplicemente con tutta la buona volontà del mondo io non sia in grado di aiutarti, se lo posti qua qualcun altro lo può vedere e darti una mano; se me lo invii in privato, non c'è speranza che altri utenti possano aiutarti
3)
temo che se lo inserisco non lo leggerà nessuno
quello che è certo è che se non lo inserisci non lo leggerà nessuno :)
4) chiaramente più il codice è minimale più è facile darti una mano ed è quindi nel tuo interesse ridurre il codice per creare un esempio minimale che riproduca il problema (vedi mio post sopra) e postare quello...ma se proprio non ci riesci, nessuno qui si spaventa per 700 righe di codice, credo...e non sono certo queste 700 righe di codice che saturano la memoria del server che ospita il forum :)

Morale: posta il codice :)
quoto :sisi:

Re: programma in c++,problemi

Inviato: lunedì 5 maggio 2014, 13:35
da vaeVictis
Se nel frattempo ce la fai pure a mettere un titolo migliore, tanto di guadagnato.
A parte il linguaggio di programmazione, il titolo che hai scelto non indica niente di attinente con la discussione, a parte l'ovvietà che l'hai aperta per via di un problema.

p.s.:
nessuno qui si spaventa per 700 righe di codice, credo...e non sono certo queste 700 righe di codice che saturano la memoria del server che ospita il forum
C'è un limite al numero massimo di caratteri per un messaggio. Numero che non ricordo.
In caso si sfori, si può usare un servizio di hosting online o qualcosa del genere.

Re: programma in c++,problemi

Inviato: lunedì 5 maggio 2014, 14:16
da seven speed
eccolo :) dopo qualche rivisitazione sono circa 500

Re: programma in c++,problemi

Inviato: lunedì 5 maggio 2014, 17:23
da Zoff
@seven speed: conviene scegliere un titolo piu' descrittivo del problema.

Re: programma in c++,accesso alle funzioni

Inviato: martedì 6 maggio 2014, 2:15
da 1001001
Scusa la franchezza, ma secondo me questo codice è da rifare da zero :)

I problemi principali che saltano all'occhio comunque sono:
1)

Codice: Seleziona tutto

int main()
{
    list_el *polixseg(input in, poligono pol);
[...]
questa cosa nella tua mente cosa dovrebbe fare? Nella mia, io capisco che volevi dichiarare una variabile di nome polixseg e tipo list_el*. Ora, tralasciando il fatto che nello stesso codice hai dichiarato una funzione con lo stesso nome e lo stesso tipo di ritorno (obfuscated c code contest, anyone? :) ) e anche il fatto che usi una C-style struct in un codice C++ per dichiarare il tipo list_el (e soprattutto senza contare che il C++ mette a disposizione un tipo list), quella cosa non dichiara nessuna variabile, perché non c'è nessun costruttore di un oggetto di tipo list_el* che prenda in ingresso un oggetto di tipo input e uno di tipo poligono. Se invece volevi chiamare la funzione polixseg della classe poligono...non è così che si chiamano le funzioni in C++, e in particolare le funzioni (non statiche) membro di una classe

2) lo stesso vale per le istruzioni

Codice: Seleziona tutto

void proiezionepuntoretta (double xa, double ya, double xp, double yp, double h, double v, double *asc, double *ord, double *coord);
double isconvesso (double p1[], double p2[], double p3[]);
int calcolaindicelatotriangolo(int iterazione);
double distanzapunti(double x1, double y1,double x2, double y2);
int in_lista(list_el **head, double asc, double ord, int posizione, char messaggio[]);
int cancella(list_el **head);
void risolvi(double xp, double yp,double xa, double ya,double h, double v, double hs, double vs, double*t, double*s);
all'inizio della funzione lista_el* poligono::polixseg(input in, poligono pol); ...cosa stai cercando di fare con quelle istruzioni?

3) (che si riaggancia al punto 1 e al tuo post di apertura del thread) tutti gli errori undefined reference to <...> sono dovuti a chiamate a funzioni che sono membri di una classe e che tu stai invece chiamando come fossero free-functions. Ad esempio (a parte le funzioni citate al punto 1 e 2):

Codice: Seleziona tutto

[....]
if(k!=i && k!=j)
    {
        if(isconvesso(dati[i], dati[j], dati[k])<=0)
        {
            error=1;
            /*strcpy(mex,"poligono non convesso");
            ret=in_lista(&head,xerr,yerr,indiceerr,mex);*/
            ret=in_lista(&head,xerr,yerr,indiceerr,"poligono non convesso");/* ricontrollare xerr  yerr etc.*/
[....]
Non puoi chiamare le funzioni isconvesso e in_lista così, le devi chiamare su un oggetto di tipo (rispettivamente) input e output

Re: programma in c++,accesso alle funzioni

Inviato: martedì 6 maggio 2014, 18:20
da seven speed
ho gia detto di sapere poco di c++. il cstyle dipende da questo,io so programmare in c e mi viene richiesto di fare un programma in c++ anche se le conoscenze non sono adeguate,quindi sicuramente non sfrutterò al massimo le sue potenzialità.si ho capito che le funzioni le devo chiamare su un oggetto e che da li viene la maggior parte degli errori.mi metto subito all'opera ;)
le istruzioni al tuo punto ") le ho eliminate,non servivano a nulla infatti.
nel punto 1) quella è una funzione che ritorna un puntatore a lista dichiarata con una struttura.(noin sapevo del fatto che c'è gia un tipo list in c++).cmq anche qui cambierò,il tipo di ritorno della funzione non sarà piu di tipo lista ma di tipo output(ingloberò li la lista).vediamo che riesco a combinare e vediamo che succede.

Re: programma in c++,accesso alle funzioni

Inviato: mercoledì 7 maggio 2014, 0:50
da 1001001
Se fossi in te onestamente prima cercherei di studiare un po' di C++ e programmazione a oggetti...
Intendiamoci, non voglio assolutamente suonare altezzoso, siamo stati tutti principianti e nessuno nasce Stroustroup, ci mancherebbe :) dico solo che secondo me (ma forse è una deviazione dovuta alla mia formazione) il metodo trial and error va bene fino a un certo punto. Non so sinceramente quali siano le richieste del tuo professore riguardo a questo codice e se magari il tuo/suo obiettivo è: "basta che funzioni", ma se questo codice deve essere qualcosa di appena appena un po' più raffinato credo che varrebbe la pena considerare di investire un po' di tempo sulla teoria per poi buttare giù un codice più "consapevole"...questi sono i miei due cents :)

In ogni caso, per ogni problema batti un colpo, noi siamo qui!

Re: programma in c++,accesso alle funzioni

Inviato: mercoledì 7 maggio 2014, 23:35
da seven speed
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..

Re: programma in c++,accesso alle funzioni

Inviato: mercoledì 7 maggio 2014, 23:38
da Zoff
Dovresti seguire anche il mio "consiglio".
Modifica il titolo con uno più pertinente.

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

Inviato: mercoledì 7 maggio 2014, 23:43
da seven speed
spero che vada bene,non riesco a trovarne uno migliore..