[C++] No matching function

« Older   Newer »
  Share  
LoGiX
CAT_IMG Posted on 16/1/2012, 13:51     +1   -1




Salve!

Sto litigando con il C++ :S

Da quello che ho capito, non viene trovata una funzione nel codice, però io dichiaro sia il protipo e sia la funzione..

Sapete aiutarmi?

Ecco l'errore:
CODICE
C:\Users\logix\Documents\esercizi\Frazioni.cpp||In function 'int main()':|
C:\Users\logix\Documents\esercizi\Frazioni.cpp|17|error: no matching function for call to 'AddizionaFrazioni(int (*)[2][2], int)'|
||=== Build finished: 1 errors, 0 warnings ===|


Ed il codice:
http://pastebin.com/6FXc9Ngv
 
Top
CAT_IMG Posted on 16/1/2012, 16:21     +1   -1

So implementare gli object

Group:
Admin
Posts:
1,215
Reputazione:
+150

Status:


Una frazione è una divisione, non ha senso quello che stai chiedendo.
Piuttosto avrebbe senso richiedere una frazione in input, processarla come una divisione e dare una frazione in output se non vuoi i decimali... La cosa giusta da fare sarebbe questa, ma se proprio vuoi addizionare frazioni nel modo in cui stai facendo, l'errore che commetti nel codice è che i template sono per le classi e non per le semplici funzioni, penso che tu li stia utilizzando nel modo sbagliato.
Qui c'è un buon esempio sull'utilizzo.
Comunque basterebbe una semplice funzione che lavora con gli interi se vuoi adottare il tuo metodo, dato che nominatore e denominatore di una frazione sono sempre interi, non vedo l'utilità dei templates.

Rimango sempre della mia opinione su come risolvere la cosa più ad alto livello (processare sempre tipi di dato nativi e non far ragionare i propri programmi come ragioneremmo noi umani).

Spero di esserti stato utile :)

 
Top
Doch88
CAT_IMG Posted on 16/1/2012, 16:32     +1   -1




Quoto dd, esclusa la parte dei templates che non sono per le funzioni
http://en.wikipedia.org/wiki/Template_(programming)

Se vuoi continuare così prova mettendo <int> dopo AddizionaFrazioni quando la chiami.

Edited by Doch88 - 16/1/2012, 16:50
 
Top
CAT_IMG Posted on 16/1/2012, 17:08     +1   -1

So implementare gli object

Group:
Admin
Posts:
1,215
Reputazione:
+150

Status:


Chiedo perdono, il C++ non è il mio forte...
 
Top
LoGiX
CAT_IMG Posted on 16/1/2012, 17:15     +1   -1




CITAZIONE (‡ (dd) @ 16/1/2012, 16:21)
Una frazione è una divisione, non ha senso quello che stai chiedendo.
Piuttosto avrebbe senso richiedere una frazione in input, processarla come una divisione e dare una frazione in output se non vuoi i decimali... La cosa giusta da fare sarebbe questa, ma se proprio vuoi addizionare frazioni nel modo in cui stai facendo, l'errore che commetti nel codice è che i template sono per le classi e non per le semplici funzioni, penso che tu li stia utilizzando nel modo sbagliato.
Qui c'è un buon esempio sull'utilizzo.
Comunque basterebbe una semplice funzione che lavora con gli interi se vuoi adottare il tuo metodo, dato che nominatore e denominatore di una frazione sono sempre interi, non vedo l'utilità dei templates.

Rimango sempre della mia opinione su come risolvere la cosa più ad alto livello (processare sempre tipi di dato nativi e non far ragionare i propri programmi come ragioneremmo noi umani).

Spero di esserti stato utile :)

Io volevo fare in modo diverso.. come faccio a scuola...
Tra le frazioni calcolo l'mcm dei denominatori, l'mcm lo metto come denominatore del risultato, e poi: mcm diviso denominatore della prima frazione moltiplicato per il numeratore della prima frazione e così via.

Comunque il codice funziona (se no ho sbagliato a riscriverlo) poichè l'avevo scritto in AutoIt e funzionava bene.

Comunque grazie.. ma i template si usano pure per le funzioni :P

CITAZIONE (Doch88 @ 16/1/2012, 16:32)
Quoto dd, esclusa la parte dei templates che non sono per le funzioni
http://en.wikipedia.org/wiki/Template_(programming)

Se vuoi continuare così prova mettendo <int> dopo AddizionaFrazioni quando la chiami.

Grazie Doch,
Il problema era il passaggio dell'array bidimensionale:
Ho cambiato:
CODICE
type** frazioni

In:
CODICE
type frazioni[][2]


sia nel prototipo della funzione e nella funzione!

Grazie, ho risolto :D

Link alla discussione su un forum che mi ha aiutato pure :asd: ..

Ma alla fine alla soluzione ci sono arrivato grazie a qua.
 
Top
CAT_IMG Posted on 16/1/2012, 18:09     +1   -1

So implementare gli object

Group:
Admin
Posts:
1,215
Reputazione:
+150

Status:


Lo so che volevi fare come a scuola, ma non ha senso elaborare così dei dati, si perde il senso di usare le frazioni che dovrebbero essere un modo per rappresentare numeri decimali in modo più semplice... Non dovresti lavorarci così.
 
Top
LoGiX
CAT_IMG Posted on 17/1/2012, 01:01     +1   -1




CITAZIONE (‡ (dd) @ 16/1/2012, 18:09) 
Lo so che volevi fare come a scuola, ma non ha senso elaborare così dei dati, si perde il senso di usare le frazioni che dovrebbero essere un modo per rappresentare numeri decimali in modo più semplice... Non dovresti lavorarci così.

Quindi per esempio
5/10 + 2/10 = (5/10) + (2/10) = 0.5 + 0.2 = 0.7

Esatto?
 
Top
CAT_IMG Posted on 17/1/2012, 11:48     +1   -1

So implementare gli object

Group:
Admin
Posts:
1,215
Reputazione:
+150

Status:


5/10 + 2/10 = 0.5 + 0.2 = 0.7

Poi:

denominatore = 1
numeratore = 0.7

denominatore *= 10
numeratore *= 10
Fino ad ottenere due numeri interi

Quindi abbiamo
denominatore = 10
numeratore = 7

Controlla se sono primi tra loro, altrimenti semplifica usando un divisore comune (qui ovviamente usa solo i numeri primi minori della metà del numero più grande).
Ripeti questa operazione fino a che i numeri sono primi tra loro.

In questo modo hai una funzione che dato in input un float è in grado di dare in output una frazione, in questo modo è riutilizzabile anche per altre cose e più corretta in generale :D
 
Top
7 replies since 16/1/2012, 13:51   95 views
  Share