Newsgroup: it.comp.lang.c++
Titolo: Array di oggetti -- aiuuuto

Non riesco a capire dove sbaglio!!
Ho creato un oggetto LinkedList, alcuni oggetti ListElement e mi piacerebbe 
tanto mettere alcuni puntatori a oggetti ListElement in un array di 
dimensione ignota... e non ci riesco!!!
int carriera::annullaMiddle( int n ) {
        ListElement * le_array = new ListElement[n];
        for ( int i = 0; i < n; i++ ) {
                le_array[i] = listaSvolte->getHead();
}
E il compilatore risponde:
carriera2.cpp: In method `int carriera::annullaMiddle (int)':
carriera2.cpp:307: no match for `ListElement & = ListElement *'
listelement.h:52: candidates are: ListElement &ListElement::operator= 
(const ListElement &)
carriera2.cpp:315: base operand of `->' has non-pointer type 
`ListElement'
(... e un'altra caterva di errori...)
Se faccio l'array in maniera statica (ListElement * le_array[100]; ) 
compila benissimo...
Ah, non uso nessun genere di overloading (a parte << ).
Cosa c'e` che non va?!?
Palantir

Palantir wrote in message
<20010621075354....@localhost.localdomain.local>...

Ciao Palantir,
dai messaggi del compilatore sospetto che l´inghippo sia nella riga:
        for ( int i = 0; i < n; i++ ) {
                le_array[i] = listaSvolte->getHead();
                                   ^
                                qua!
Ovvero, tu stai assegnando all´oggetto Ie_array[i], il ritorno della
funzione membro getHead() che presumibilmente (dato che non posti il codice
interessato) ritorna un puntatore a ListElement.
Per cui il rimedio e´ assegnare allo stesso Ie_array[i] il contenuto del
puntatore ritornato da getHead() deferenziandolo:
     le_array[i] = *(listaSvolte->getHead());
Spero di esserti stato di aiuto
MaurusAP

 compila benissimo...
Certo. Questo e' un array di puntatori. Se lo dichiari come quello dinamico:
ListElement le_array[100];
vedrai che ottieni gli stessi errori.
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

Ho creato un oggetto LinkedList, 
putroppo non ho tempo per controllare il tuo codice, però ti posso
fornire una implementazione alternativa un po' più sintetica:
#include <list>
typedef list<ListElement> LinkedList;
:-)))
Anto
--
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

 :-)))
Siigh! Purtroppo il testo del mio progetto d'esame per laboratorio di 
programmazione 2 recita che non possono essere usati oggetti di libreria 
:(( Cosi` mi sono reimplementato mezzo C++ a mano... con i risultati che 
vedi :PP
Grazie lo stesso :)
Palantir

 puntatori ad essi?
Oh-mio-Dio... e io ci ho pensato su per due giorni... 
buhaaaaaa :-@
Certo che stare 15 ore al giorno davanti a questo aggeggio infernale mi ha 
lavato il cervello ben bene
Grazie grazie grazie :)
Palantir

 wrote in message
news:20010621180901....@localhost.localdomain.local...

Piccolo trucco. Se il compilatore ti dice qualche cosa come:
Error File:a/very/long/path/name.c line:123454 CODE:CPPWSD125345 Fucked Out by
Failed Conversion: cannot convert "MioCugino *" to "MioCugino &". Tryed 126
overloaded candidates. See list in e-mail.
Non fermarti quando leggi "Error" e andare direttamente alla linea sorgente per
capire cosa succede. Forse il messaggio e il suo formato sono strani e
accompagnati da altri 126 messaggi che ti elencano tutti i tentativi del
compilatore per fare quello che comunque non e' riuscito a fare. Ma dopo un
pochino di esperienza riesci a capire quali sono le parti essenziali del
messaggio di errore, e spesso la soluzione e' ovvia.
In questo caso ti dice che non riesce a convertire "MioCugino*" in "MioCugino&"
e questo, anche se il cugino in questione e' un combattente della Jihad, non ha
nulla di religioso o trascendentale. Un puntatore come sorgente e una reference
come destinazione. Se guardi il codice vedi che si tratta di
lista_cugini[k]=espressione();
da cui deduci che espressione() ha come valore un "MioCugino*", che e' quello
che effettivamente ti aspetti, mentre lista_cugini[k] e' una variabile di tipo
MioCugino o una reference a MioCugino (il che a sinistra dell'uguale e' la
stessa cosa). Dato che k e' un intero e lista_cugini e' un puntatore, sapendo
come funziona [] dovresti dedurre subito che la dichiarazione di lista_cugini ha
qualche cosa che non va nel "tipo a cui punta".
Etc.
In poche parole, senno' mi dicono che scrivo messaggi lunghi (il che in questi
giorni e' vero), cerca di trarre il massimo beneficio dai messaggi di errore e
warning. Anche se all'inizio (soprattutto con un compilatore nuovo) puo' essere
un casino. Specialmente quando avrai a che fare con i template!


la soluzione e' ovvia.
Sempre che tu non stia lavorando con i template ;)
ricordo un caso in cui usando STL con container nidificati
invece di un const_iterator avevo usato un iterator.
Il messaggio di errore erano 4 schermate 80x25 di bestemmie
cosi' brutte che sembravano il "type" di un file binario.
Il problema alla fine l'ho capito pero' il messaggio era
cosi' assurdo che me lo sono salvato per ricordo...
Quella e' una parte in cui secondo me i compilatori devono
fare ancora un po' di strada...
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

 wrote in message
news:3b325528...@news.interbusiness.it...

Si. Ma ci sono tecniche per interpretare velocemente anche quei messaggi. Un
esempio lo trovi da qualche parte sul sito delle Boost.
