Newsgroup: it.comp.lang.c++
Titolo: Lvalue required

Mi è venuto fuori eseguendo un programma. Che cosa vuol dire?


Forse ti e' venuto fuori compilando un programma.
Vuol dire che nella riga corrispondente all'errore hai fatto un assegnamento
che non puoi fare, e cioe' che la parte a sinistra dell'assegnamento non
puo' ricevere il valore che avresti voluto assegnarle.
Se ad esempio faccio:
int i = 0;
10 = i;
Ottengo lo stesso messaggio dal compilatore.
Se posti la parte interessata del programma magari si vede meglio il
problema.
Maurus

La parte interessata è la seguente:
while (fin.getline(c,20,'#'))
   {
   ptr = new Tnodo;
   ptr->info = c;
   ptr->sin = ptr->des = NULL;
   inserisci(albero,ptr);
   }
mi da errore in corrispondenza di
   ptr->info = c; dove c è char c[20]
ptr è    Tnodo *ptr;
e Tnodo è
struct Tnodo
   {
   char info[20];
   Tnodo *sin, *des;
   };

 wrote in message
news:l5kU9.27629$AA2.1...@news2.tin.it...


tu qua stai facendo un assegnamento fra 2 arrays, il che non e' permesso.
Devi farlo con uno strcpy se e' una stringa o con uno strncpy o con un
memcpy o con un ciclo
Maurus

 memcpy o con un ciclo
O addirittura con std::copy, che funziona per qualsiasi tipo di array:
#include <algorithm>
std::copy(c,c+20,ptr->info);
ciao,
Nicola

 Nicola
Grazie Nicola.
Bisognerebbe che mi spiegaste il trucco per farvi venire in mente le miriadi
di algoritmi e funzioni della STL. Con la mia labile memoria e' un
problemaccio per me. Ha una capienza limitata e funziona come una coda, per
cui prima che escano le soluzioni nuove, occorre che la svuoti di tutte le
vecchie soluzioni stile C e C++ non STL !
Maurus

 vecchie soluzioni stile C e C++ non STL !
In alcune cose ci si ricorda di esservi incappati qua o la', altre,
come std::copy, non possono non esistere; per i dettagli ed i
chiarimenti, tenere a portata di mano una copia dello Josuttis (ma
anche il link alla documentazione Dinkumware da poco segnalato e' una
buona risorsa).
Ciao,
Nicola

 Nicola
Che ne pensi, se l'hai letto, dell'altro libro di Josuttis "C++ Templates"?
Saluti
R.I.

 come std::copy, non possono non esistere; 
beh, a dire la verita` ci sono degli algoritmi che "non possono non 
esistere" ma, di fatto, non ci sono; mi riferisco in particolare a 
copy_if: devo ancora capire perche` diamine non sia standard!
ciao Anto
-- 
"Computer science is not about computers any more than astronomy
is about telescopes." -- EW Dijkstra

 ciao Anto
Perche' come ha detto il Dio del C++, Mr Stroustrup in persona, la sua
implementazione e' banale.
Ma Scott Meyer ha fatto vedere in Effective STL che una possibile banale
implementazione era errata.
Dopo ha ovviamente dato la soluzione ma era per farci capire i diversi modi
di intendere l'aggettivo banale!
template <typename InputIterator, typename OutputIterator, typename
Predicate>
OutputIterator copy_if(InputIterator begin, InputIterator end,
OutputIterator destBegin, Predicate p)
{
   while (begin != end)
   {
        if (p(*begin))
            *destBegin++ = *begin;
        ++begin;
   }
   return destBegin;
}
Banale eh? ...dipende.
Maurus

 Banale eh? ...dipende.
Non ho letto quel libro, ed ad una prima occhiata mi sembrerebbe corretto.
Perchè dice che è errato?
-- 
Andrea Bergia - studente              Linux Registred User #281550
"The one thing we're all waiting for, is peace on Earth and an end to war,
it's a miracle we need, the miracle, the miracle, 
Peace on earth and end to war today,
That time will come one day you'll see when we can all be friends"

 Andrea Bergia - studente              Linux Registred User #281550
No, questa e' la soluzione corretta.
Ok e' banale dice Stroustrup e Scott Meyers l'ha implementata cosi', ma c'e'
anche una soluzione banale che e' errata:
template <typename InputIterator, typename OutputIterator, typename
Predicate>
OutputIterator copy_if(InputIterator begin, InputIterator end,
OutputIterator destBegin, Predicate p)
{
      return remove_copy_if(begin, end, destBegin, not1(p));
}
Anche questa potrebbe sembrare un'implementazione ancora piu' concisa per la
copy_if, ma c'e' quel not1 che puo' dare problemi in caso p fosse un
puntatore a funzione.
Per chiamare questa copy_if occorre un oggetto-funzione che sia adattabile.
Ad esempio sia Widget una classe:
class Widget{ ... };
E data una funzione booleana:
bool isDefective(const Widget &w);
che controlla se un certo oggetto widget e' difettoso in base a dei
controlli su qualche suo membro.
Ora vogliamo che tutti gli oggetti widget difettosi di un certo vettore,
siano scritti su cerr.
Allora basterebbe fare questo:
vector<Widget> widgets;
copy_if(widgets.begin(), widgets.end(), ostream_iterator<Widget>(cerr,
"\n"), isDefective);
Purtroppo con l'implementazione banale ma errata della copy_if data sopra,
non funziona, ma bisogna utilizzare la copy_if postata prima.
Non funziona perche' il predicato not1, non puo' essere applicato alla
funzione booleana isDefective().
Grazie a Scott Meyers.
Maurus

 Che ne pensi, se l'hai letto, dell'altro libro di Josuttis "C++ Templates"?
Ne parlano molto bene, ma personalmente non l'ho letto. Pero', se
consideri che il suo coautore, Daveed Vandevoorde, ha partecipato
all'unica implementazione di 'export' conosciuta...
Ciao,
Nicola


Secondo te vale la pena di aquistarlo o sono solo soldi buttati?
Ultimamente ho preso una paio di libri sull'argomento e non mi sono
piaciuti... l'esposizione non era molto chiara... come è, invece, sono i
libri di Meyers o di Sutter.
E chiedo scusa a te ai lettori di questo NG per l'OT ma vorrei sapere che ne
pensi del libro: "C++ How to Program, 4/E" di Deitel&Deitel?
Mi hanno chiesto, infatti, di preparare un corso, con relativo programma di
studi, in C++ e sono indeciso su quale testo far studiare gli allievi del
corso.
Saluti
R.I.
P.s.: Il programma del corso lo trarrò, con qualche chiarimento dalla quarta
edizione del libro, mentre pensavo di far studiare gli allievi sulla terza
edizione tradotta in italiano dalla APOGEO. Che ne pensi?

 corso.
Al tuo posto probabilmente utilizzerei il Lippman-Lajoie.
Ciao,
Nicola

 implementazione e' banale.
gia`... invece std::max e` complicato! ;-)


 --
In effetti , il fatto del banale l'avevo letto in chiave ironica, forse per
il fatto che si sono semplicemente dimenticati di metterlo nello standard,
per qualche oscura ragione.
Maurus

 Al tuo posto probabilmente utilizzerei il Lippman-Lajoie.
Si ci avevo giŕ pensato... ma a me serve un libro didattico... e per quanto
ritenga sia scritto veramente bene non so se sia adatto. A me servirebbe un
libro su cui gli allievi del corso si appassionino alla materia e per quanto
io faccia del mio meglio per invogliarli; a casa loro si troveranno sempre
un libro che non gli "garba". Vorrei che questo corso fosse cosě
"affascinante" da tenere gli allievi "incollati" alla sedia... e devi
ammettere che una minima parte del lavoro va anche al libro di testo no? -
Ma forse pretendo troppo? -