mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c++
Titolo: gdb e segmentation fault

Com'e' possibile che un programma che da' in esecuzione segmentation fault,
una volta eseguito nel debugger gdb termini correttamente?
Grazie,
Paolo

una volta eseguito nel debugger gdb termini correttamente?
In vari modi: variabili non inizializzate (che il debugger potrebbe
piazzare in memoria che, casualmente ma, magari, anche in modo
ripetibile, contiene valori diversi da quelli che capita contenere
quando il programma esegue da solo); sporcamenti di memoria
(indici fuori gamma in vettori, puntatori a capocchia, ecc ecc) che
vanno a "sporcare" aree diverse nei due casi, e capita (anche qui,
non e` strano che la cosa sia ripetibile) che facciano uno sporcamento
disastroso in un caso ma inosservabile nell'altro; ecc.
Molti debugger (incluse alcune versioni di gdb) hanno opzioni
per forzare tutta la memoria non inizializzata a valori particolari
(0xDeadBeef, ad esempio, e` un unsigned long popolare!); se
puoi, prova ad usarle, potrebbero permetterti di vedere l'errore
anche a debugger (puo` darsi che anche il tuo compilatore sia
in grado di produrre simili "pattern di riferimento").
Alex

 una volta eseguito nel debugger gdb termini correttamente?
Se il programma ha problemi tipo puntatori non inizializzati, e' facile
che si comporti in maniera diversa fra un'esecuzione e l'altra.
Comunque se quando da' il segmentation fault genera un file core, si puo'
scoprire dove si e' piantato con
  gdb <nome-programma> core
e poi al prompt del gdb
  info stack
	Mauro

 Paolo
Penso che anche per questo caso valga la stessa ipotesi che ho esposto
in un altro articolo su questo NG (se fai una ricerca su
http://www.dejanews.com
 lo trovi sicuro, e' di ieri ....).
In pratica il tuo programma viene eseguito in un'area di memoria diversa
da quella "normale" (cioe' senza gdb).
E' probabile che tu faccia accesso ad un'area di memoria che, con gdb
attivo, non risulta determinante per una corretta esecuzione del
programma, viceversa, viene fatto un accesso che viola qualcosa di
importante.
Dato che nessuno mi ha smentito (soprattutto i Guru), ritengo che quello
che ho consigliato nell'altro messaggio possa essere valido anche nel
tuo caso: fai un attento debug facendo attenzione ai Puntatori (non
devono assumere, se non previsto, valori "strani", tipo quello di un
altro puntatore) e ai Cicli ("sforare" dagli array in un ciclo e' il
caso piu' classico che puo' capitare).
Saluti, UDA.
-- 
<><><><><><><><><><><><><><><><><><><><><><><><
UDA'Software
mailto:
uda.so...@iol.it
http://www.GeoCities.com/SiliconValley/Bay/2165
Newsgroup: it.comp.lang.c++
Titolo: Lumi su prototipo metodi per operazioni su Vector, Matrix etc

Supponendo di voler definire una classe tipo Vector o Matrix, con 
operazioni tipo la somma, ecc. a parte il discorso di overloading di 
operatori, ritenete sia preferibile avere metodi del tipo:
// this = this + v
Vector & sum( const Vector & v );
// return this + v
Vector sum( const Vector & v ) const;
// this = v1 + v2
Vector & sum( const Vector & v1, const Vector & v2 );
Thanx per eventuali lumi!
Bye
Dan

 Vector & sum( const Vector & v1, const Vector & v2 );
Uhm... boh, funzica, ma non so perche' non mi piace.
Anyway, credo che l'overloading di operator+ rimanga _comunque_ la 
miglior scelta. Quindi, anche per il prototipo, io copierei da operator+.
-- 
/**
  * Mattia Belletti - Undergraduate student @ 
cs.unibo.it
  * ICQ: 33292311   - email: 
mbel...@cs.unibo.it
  * IRC: BluShine   - site(s): 
http://cs.unibo.it/~mbellett
  * Linux registered user 299762 @ Linux registered machine 213003
  */

 Vector & sum( const Vector & v1, const Vector & v2 );
Tornare per reference e' estremanente pericoloso. Per il resto e'
corretto.
Ciao,
Nicola

 corretto.
Ti ringrazio per le info.
Ciao
Dan

 Anche la prima forma di sum (tipo operator+=) torna un riferimento...
Davo per scontato che si trattasse di una funzione libera e non di un
membro di una classe. A te pare sensato:
a.sum(b,c);
dove a assume il valore della somma? A me no. Piuttosto uno scrive:
a = sum(b,c);
Ciao,
Nicola

 a = sum(b,c);
Beh, sinceramente a me pare sensato a.sum(b,c) :-)
...sara' questione di gusti :)
btw: certo, non tornerei mai un riferimento se fosse
// non membro
Vector sum(const Vector & v, const Vector & w);
:)
ciao,
dan

 ...sara' questione di gusti :)
Beh, almeno chiamiamola 'assign_sum'.
Max
Newsgroup: it.comp.lang.c++
Titolo: Calcolo di aree..

Salve,
il mio problema e' questo.  Ho una serie di punti (x,y) che stanno sul
perimetro di una data figura chiusa irregolare.
Che algoritmi mi conviene adopeare per trovare l'area di tale figura?
Dove posso trovare dei sorgenti in C++  che contengano procedure per il 
calcolo di aree di figure qualsiasi dati i punti al contorno???
                                         Grazie mille!!
*****************************************************************************
+                                                                          
+	HAPPY SURFING ON THE NET !!                     	Ciao!!!
+        								
+	                                by
+
+							  C R I X 98
+
***************************************************************************
--
Posted from 
mta2.iol.it
 [195.210.91.152]
via Mailgate.ORG Server - 
http://www.mailgate.org

                                          Grazie mille!!
Guarda le FAQ di comp.graphics.algorithms 
(
http://www.cis.ohio-state.edu/hypertext/faq/usenet/graphics/algorithms-faq/faq.html
)
Per il tuo problema trovo :
Subject 2.01: How do I find the area of a polygon?
    The signed area can be computed in linear time by a simple sum.
    The key formula is this:
        If the coordinates of vertex v_i are x_i and y_i,
        twice the signed area of a polygon is given by
        2 A( P ) = sum_{i=0}^{n-1} (x_i y_{i+1} - y_i x_{i+1}).
    Here n is the number of vertices of the polygon.
    References: [O' Rourke (C)] pp. 18-27; [Gems II] pp. 5-6:
    "The Area of a Simple Polygon", Jon Rokne.
    To find the area of a planar polygon not in the x-y plane, use:
 
       2 A(P) = abs(N . (sum_{i=0}^{n-1} (v_i x v_{i+1})))
 
       where N is a unit vector normal to the plane. The `.' represents the
       dot product operator, the `x' represents the cross product operator,
       and abs() is the absolute value function.
 
    [Gems II] pp. 170-171:
    "Area of Planar Polygons and Volume of Polyhedra", Ronald N. Goldman.
Vincenzo
-- 
-----------------------------------------------------------------------
Vincenzo  Positano                email: 
posi...@sunecho.ifc.pi.cnr.it
 
Institute of Clinical Physiology  (IFC - CNR)              Pisa (Italy)
http://sunecho.ifc.pi.cnr.it/~positano/home.html
 
=======================================================================

Che algoritmi mi conviene adopeare per trovare l'area di tale figura?
Dipende dalle risposte alle domande di cui sopra (risposte in
questo gruppo, please, NON nella mia mailbox!).
Alex

Ciao, questa č una semplice idea:
ipotesi: i punti (x,y) sono i vertici del poligono convesso e nessun lato č
              perpendicolare all'asse X.
tesi:
area = 0
per ogni i da 0 a NVertici -1
        se x(i) >= x(i % NVertici) allora
            area = area - (area del trapezio tra il lato e l'asse X)
        se x(i) < x(i % NVertici) allora
            area = area + (area del trapezio tra il lato e l'asse X)
buon lavoro,
Davide.
Newsgroup: it.comp.lang.c++
Titolo: parser

dove posso trovare informazioni sull'uso di analizzatori lessicali etc. tipo
bison, yacc flex?
Meglio in Italiano of course

Le distribuzioni GNU di flex e bison includono un manuale molto ben fatto.
Puoi trovare il PostScript appeso nel mio sito www sotto:
http://wwwcdf.pd.infn.it/www/localdoc.html
 .
-- 
Maurizio Loreti                      
http://wwwcdf.pd.infn.it/~loreti/mlo.html
Un. of Padova, Dept. of Physics - Padova, Italy          
lor...@padova.infn.it

Tempo fa era uscito un articolo su DEV o su Computer Programming. Se lo
trovo ti comunico il numero. Nel frattempo fai qualche ricerca in internet.
--
Byez.
Stefano Tempesta
temp...@tin.it
http://tempesta.freeweb.org
--------------------------------
(-: To "shut down" your system, type "WIN" :-)
(-: Windows VirusScan 1.0 - "Windows found: Remove it? (Y/N)" :-)

Newsgroup: it.comp.lang.c++
Titolo: [JOB] La mia ditta cerca programmatori

Scusate per il semi-OT. Spero che a chi può interessare serva...
http://www.teradp.com/web/positions.asp
========
...
Software Developer - Ref. SD 271/03
2 C++ programmers to join existing structure in the publishing system 
development area.
Skills in MFC, Microsoft SQL Server, Mac programming, Perl Language, 
Microsoft IIS, and ASP Pages.
Good team players, self-motivated, good project management ability.
Positions will be based in Milan.
...
=========
Gli skill sono in OR, non è necessario conoscere tutto... Guardate nel 
sito per vedere cosa sviluppiamo. Assunzione a tempo indeterminato.
Ciao e scusate ancora.
-- 
Luc.

 
"scusate"? 
ma con tutti questi OT di merda che girano...una offerta di lavoro di questi 
tempi merita un "coffi"! ;-)
Ciao!
-- 
__________________________________
"Ama e fai c'ho che vuoi".... 
__________________________________

 tempi merita un "coffi"! ;-)
Si, ma è OT, e quindi mi sono scusato preventivamente. Cmq, Venerdi esce 
anche sul Corriere della Sera in un (costosissimo) Box.
-- 
Luc.
Newsgroup: it.comp.lang.c++
Titolo: Eutron Smartkey

Salve a tutti. Sto usando per un mio programma una chiave di protezione
della Eutron e precisamente una Smartkey NET.
Il mio problema riguarda la possibilità di programmare la chiave
tramite un altro mio programma senza dover utilizzare il kit fornito
dalla Eutron.
Per una chiave completamente nuova non ho nessun problema ad impostare
l'etichetta e la password. Quello che non riesco a fare e resettare la
chiave come fa il kit.
Qualcuno saprebbe aiutarmi?
Grazie.

Ciao,
Questo newsgroup si occupa del linguaggio di programmazione C++. Per
questo non e' il posto piu' adatto per porre domande come la tua. Ti
invito a cercare un gruppo il cui argomento sia piu' rispondente alle
tue esigenze. Avrai maggior probabilita' di risolvere il tuo problema
ed eviterai perdite di tempo a chi consulta it.comp.lang.c++ .
Grazie,
Nicola Musatti

chiave come fa il kit.
1) Sono certo che l'Eutron stessa puo' fornirti queste
informazioni tramite il loro servizio tecnico.
2) Se per "resettare" intendi il tab "Ripristina default" del
SPC.exe occorre solo cambiare la label/password e azzerare la
memoria, operazioni che puoi fare utilizzando le API a corredo.
3) Adesso una persona antipatica ti scrivera' che sei off topic.

Goodidea ha scritto:

Grazie per l'aiuto.

Anche se sono fuori tipic come mi è stato fatto notare aggiorno lo
stesso la discussione.
Ho chiesto direttamente alla Eutron e mi hanno comunicato che il reset
della chiave può essere fatto solo tramite utility e le api non
vengono esportate per avere maggiore sicurezza.
alevin ha scritto:


vengono esportate per avere maggiore sicurezza.
Forse non ho capito cosa intendi per "reset"... :(
Newsgroup: it.comp.lang.c++
Titolo: la parolina magica:VIRTUAL

a che serve ?
Ph.

 Ph.
alla run-time variabilita' dei tipi.
Un metodo di una classe base dichiarato virtual consente a chi lo invoca
attraverso il
puntatore ad un oggetto di tipo classe base di accedere al
corrispondente
metodo definito per una classe figlia, se l'oggetto a cui punta e' un
oggetto di tipo classe figlia.
Dal punto di vista architetturale consente di realizzare il
polimorfismo. Polimorfismo significa che il vero tipo di un oggetto non
e' noto al compile time, ma viene risolto
al run time. In pratica, al tuo codice puo' essere fornito un puntatore
ad un oggetto
di tipo figlia, il tuo codice puo' castarlo ad un puntatore di oggetto
di tipo madre,
tu puoi invocare un metodo di quello che credi essere un oggetto di tipo
madre
ed avere il risultato di un oggetto di tipo figlia.

a che serve ?
Difficile riassumere in poche parole, quella parolina nasconde
tematiche su cui sono stati scritti fiumi di articoli...
Sostanzialmente serve a realizzare tipi di dato che possano essere
manipolati uniformemente (ovvero tramite una unica interfaccia).
Non saprei quanto questa risposta possa essere esauriente, ma in 
2 righe non saprei cosa altro dire.
Puoi provare a leggerti un mio documento introduttivo sulla OOP
(alla mia home page o su 
www.programmazione.it
), spero ti
possa aiutare.
Paolo
--------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
--------------------------------------------------

[CUT]

 [cut]

 a che serve ?
Serve nel caso tu prevedi di derivare quella classe e che la derivata svolga
quella operazione in un modo "personale"....
Consideriamo una classe generica che identifica le immagini:
class shape {
  virtual disegna() = 0;
  altre funzioni
};
class triangolo : public shape {
  disegna() {quello che deve fare}
  altre funzioni
};
class rettangolo : public shape {
  disegna() {quello che deve fare}
  altre funzioni
};
In questo caso se tu hai una funzione che processa una shape viene
richiamata la funzione disegna della classe derivata a cui appartiene
l'oggetto.
void faiQualcosa(const shape& obj)
{
  fai quello che vuoi
  obj.disegna() /*esegue quella di triangolo o rettangolo in base a cosa è
obj */
  fai quello che vuoi
}
--
| /
| \Byte - Andrea Briganti - 
kbyt...@freemail.it
http://members.xoom.it/kbytesystem
ICQ: 40872731 - C6: andreakbyte
Newsgroup: it.comp.lang.c++
Titolo: problema con assegnamento e riferimenti

Sono agli inizi con il c++, ho creato la seguente semplicissima classe:
#include <string>
#include "boost/date_time/gregorian/gregorian.hpp"
using namespace std;
class Pippo
{
     public:
         Pippo(string title, string description, boost::gregorian::date&
todoDate);
     protected:
         string title;
         string description;
         boost::gregorian::date todoDate;
};
la cui implementazione e':
#include "pippo.h"
Pippo::Pippo(string Title, string Description, boost::gregorian::date& 
Date)
{
     title = Title;
     description = Description;
     todoDate = Date;
}
Compilando con g++ -c pippo.cpp ottengo questi errori:
pippo.cpp: In constructor `Pippo::Pippo(std::basic_string<char,
    std::char_traits<char>, std::allocator<char> >, std::basic_string<char,
    std::char_traits<char>, std::allocator<char> >, 
boost::gregorian::date&)':
pippo.cpp:4: error: no matching function for call to 
`boost::gregorian::date::
    date()'
/usr/include/boost/date_time/gregorian/greg_date.hpp:33: error: 
candidates are:
    boost::gregorian::date::date(const boost::gregorian::date&)
/usr/include/boost/date_time/gregorian/greg_date.hpp:64: error: 
    boost::gregorian::date::date(boost::date_time::special_values)
/usr/include/boost/date_time/gregorian/greg_date.hpp:60: error: 
    boost::gregorian::date::date(boost::date_time::int_adapter<long 
unsigned
    int>)
/usr/include/boost/date_time/gregorian/greg_date.hpp:56: error: 
    boost::gregorian::date::date(const long unsigned int&)
/usr/include/boost/date_time/gregorian/greg_date.hpp:53: error: 
    boost::gregorian::date::date(const 
boost::gregorian::greg_year_month_day&)
/usr/include/boost/date_time/gregorian/greg_date.hpp:45: error: 
    boost::gregorian::date::date(boost::gregorian::greg_year,
    boost::gregorian::greg_month, boost::gregorian::greg_day)
Non riesco a venirne a capo, perche' viene chiamato date() ?

 Non riesco a venirne a capo, perche' viene chiamato date() ?
Perché, prima che tu gli possa assegnare un valore, il membro 'todoDate' 
deve poter essere instanziato, e questo richiede un costruttore senza 
parametri.
Anziché effettuare un assegnamento, usa la 'initialization-list':
 Pippo::Pippo(string Title, string Description, 
                        const boost::gregorian::date& Date)
    : 
         todoDate( Date )
   {
       // ...
Max

Max M. wrote:
 > Perché, prima che tu gli possa assegnare un valore, il membro 
'todoDate' deve poter essere instanziato, e questo richiede un 
costruttore senza parametri.
 >
 > Anziché effettuare un assegnamento, usa la 'initialization-list':
 >
 >  Pippo::Pippo(string Title, string Description, 
    const boost::gregorian::date& Date)
 >     :          todoDate( Date )
 >    {
 >
 >        // ...
grazie mille, mi hai chiarito due dubbi in un colpo solo, difatti non 
avevo mai capito a cosa serviva quel codice tra ) e { che si vede da 
tante parti :D
Marco
Newsgroup: it.comp.lang.c++
Titolo: template, static

Considerate la seguente classe:
template <class T>
class StaticConst
{
   static unsigned count;
public:
   StaticConst() { if (++count == 1) T::staticConst(); }
   ~StaticConst() { if (--count == 0) T::staticDest(); }
};
L'idea č chiara, no?
Assumiamo di farla ereditare ad una classe X. Il problema č che
   template <class T>
   unsigned StaticConst<T>::count = 0;
non funziona e sono costretto a usare
   unsigned StaticConst<X>::count = 0;
che č poco elegante poiché count non fa parte dell'interfaccia di 
StaticConst.
Esiste un modo semplice per ovviare al problema?
Kiuhnm

 Assumiamo di farla ereditare ad una classe X.
Porta pazienza, ma non capisco. Nonho problemi a compilare:
template <class T>
class StaticConst
{
public:
   static unsigned count;
   StaticConst() {  }
   ~StaticConst() {  }
};
template <class T>
class XX: public StaticConst<class T>
{
};
template <class T>
unsigned StaticConst<T>::count = 1;
int main(bla,bla)
{
 XX<int> pippo;
 XX<std::string> pluto;
 int a;
 a = pippo.count;
 a = pluto.count;
return 0;
}
-- 
ippopotamo sparabolle: 
http://www.genux.com/files-V2/img-8/pg-47974-ek1.jpg
il capitalismo: 
http://www.rat-man.com/site/IT/IT/rat_cartoon.ashx?mn=5

 int main(bla,bla)
Cioč ti compila anche quella riga???
Kiuhnm

 Esiste un modo semplice per ovviare al problema?
Temo di no, dal momento che sembrerebbe essere un baco del tuo
compilatore. Lo standard infatti recita:
14.5.1.3 Static data members of class templates [temp.static]
1 A definition for a static data member may be provided in a namespace
scope enclosing the definition of the static member's class template.
[Example:
template<class T> class X {
static T s;
};
template<class T> T X<T>::s = 0;
-end example]
Ciao,
Nicola

 Esiste un modo semplice per ovviare al problema?
Come non detto: ho inserito per errore la def. nel file .cpp!
Kiuhnm

 Cioè ti compila anche quella riga???
Compila tutto con il VC2005.

Newsgroup: it.comp.lang.c++
Titolo: Compilatore free....

Salve a tutti,
sono un pascalista :-) che sta tentando di migrare al C++. dal sito della
Borland ho scaricato Compiler 5.5 ma non so come funziona. Si trova da
qualche parte un compilatore con interfaccia Windows in modo da rendere meno
traumatica questa migrazione?
grazie

traumatica questa migrazione?
Il compilatore che hai scaricato e' il cuore del BC++ Builder.
Prova a vedere se c'e' una delle prime versioni liberamente
scaricabile dal sito, altrimenti rivolgiti all'edicola ;)

Il mese prossimo con DEV esce C++ builder 3 completo. Mi pare che sia già
uscito pure con Inter.Net questo mese, o quello scorso...
--
Marco Iannaccone
marc...@tin.it
Nick: Tolkien
ICQ UIN: 18748121
"This is a new ship, boy, but she's got the right name...
You treat her like a lady, and she'll always bring you home"
"Questa è una nave moderna, ma ha un nome antico e glorioso...
Trattala come una signora e ti riporterà sempre a casa"
FAQ di it.comp.lang.c:
http://www.programmazione.it/linguaggi/c/itcomplangc.htm

Newsgroup: it.comp.lang.c++
Titolo: typename

Questa parola chiave non mi vuole entrae in testa. Ogni tanto mi provo ad 
utilizzarla quando non riesco a capire perchè un certo codice non 
compila...
Qualcuno mi pottrebbe dare un po' di aiuto per capirla bene ?
Se ben ricordo è stata introdotta relativamente di recente ...

Goffredo Baroncelli wrote:

Mi rispondo da solo...
se mi trovo in un caso del tipo
template <typename TT> void print( TT &m ){
        TT::iterator i;
[....]
dove TT::iterator è un tipo, il compilatore può ( o deve ? ) interpretarlo 
come un membro interno classico ( una variabile ). Specificando invece
template <typename TT> void print( TT &m ){
        typename TT::iterator i;
Il compilatore sa che TT::iterator è un tipo e tratta la riga come una  
dichiarazione della variabile i...
E' un po'... contorto: non si sarebbe potuto effettuare il check quando si 
istanziava il template ( per cui TT era BEN definito ed altrettanto 
TT:iterator ) ?

 TT:iterator ) ?
no, per questioni di parsing. In effetti la grammatica del C (e del C++) 
e` tale da non permettere un parsing indipendente dal contesto: il 
parser *deve* sapere quando un token e` un identificatore di tipo o 
meno, altrimenti non puo` compiere il suo lavoro: se si lavora con i 
template il parser non potrebbe sapere se TT::iterator e` un tipo sino 
al momento dell'istanziazione... ma dato che il compilatore non puo` 
istanziare un template sino a che il parser non ha completato il suo 
lavoro e` necessario trovare un altro modo per dire al parser "quello 
che segue e` un nome di tipo": la keyword "typename" serve proprio a 
questo.
ciao Anto
-- 
Antonio Cuni, 20 anni, studente
Brainbench C++ Master: 4.73, higher than 99% of all previous test takers.
C Language: 3.79, higher than 92% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it
Newsgroup: it.comp.lang.c++
Titolo: MS Visual C me lo compila, gcc no

Ciao,
supponete di avere una struttura del tipo:
typedef struct mystruct_t
{
int  v1, v2;
unsigned char *v3;
// Costruttore
mystruct_t( int  p_v1, int p_v2, unsigned char *p_v3) : v1(p_v1),
v2(p_v2), v3(p_v3)
{
}
} mystruct_t;
e una classe del tipo:
class MyClass
{
public:
static myfunc(mystruct_t  &m);
};
Da qualche altra parte del programma ho una chiamata tipo:
MyClass::myfunc(mystruct_t(1, 2, NULL));
Ora, mentre con il visual C++ tutto funziona, compilando con g++ sotto
linux (uso Mandriva ed Eclipse come IDE) mi da il seguente errore:
no matching function for call to 'MyClass::myfunc(mystruct &)
Perché tutto ciò? Non riesco a vedere una spiegazione. Alla funzione
myfunc passo per riferimento un oggetto mystruct_t(1, 2,
NULL)..quindi??
Help!
Luca

 linux (uso Mandriva ed Eclipse come IDE) mi da il seguente errore:
Ha ragione il g++, il tuo codice è errato perché un reference non-const 
può essere "legato" solo ad un lvalue, ed un oggetto temporaneo (come 
quello che tu passi alla funzione) non è un lvalue.
D'altra parte se la funzione *non* modifica l'oggetto che tu gli passi 
per riferimento è opportuno che tu la modifichi rendendo const il 
parametro: static myfunc(const mystruct_t  &m); o static 
myfunc(mystruct_t const &m)
Le due dichiarazioni sopra sono equivalenti.
Se invece la funzione modifica l'oggetto allora non puoi passargli (né 
d'altra parte avrebbe senso) un temporaneo e quindi la chiamata 
diventerebbe questa:
mystruct_t obj(1, 2, NULL);
MyClass::myfunc(obj);
Ciao.

Newsgroup: it.comp.lang.c++
Titolo: Ciao sono nuovo..

ciao
sto cercandi di imparare a programmare con visual C++ volevo sapere:
qualcuno conosce un sito dove trovare degli esercizi facili facili?

 ha scritto nel messaggio
news:0xvYb.248941$VW.10...@news3.tin.it...


Newsgroup: it.comp.lang.c++
Titolo: Cerco disperatamente MicroSoft C++ 6.0/7.0

Cerco  compilatore come da oggetto.
Devo urgentemente  modificare dei sorgenti e linkarli con delle librerie
fornite che si rifiutano di funzionare con Borland.
Accetto qualsiasi aiuto.
Pagamento in contrassegno.
LG


wrote:


 rhymes ha scritto:


 Te lo devi comprare per forza.



wrote:


Newsgroup: it.comp.lang.c++
Titolo: sono un principiante

in fase di debug file exe ho il seguente messaggio
"The Microsoft ActiveSync connection server has failed"
e non viene eseguito il dowload;
cosa devo fare per realizzare la connessione?
Grazie


Prova a chiedere in un newsgroup specifico Microsoft. Per quello che
lasci intendere, ed e' molto poco, la tua domanda non ha niente a che
vedere col C++ standard.
Ciao,
Nicola


si tratta del visual C++ Embedded
in fase di build del progarmma mi viene segnalato il messaggio della
connessione ActiveSync
Questa connessione riguarda i palmari o altro.
Infatti ho installato l'ActiveSync e mi esce il messaggio che manca la
periferica.
Ciao e grazie comunque
Tommaso
Newsgroup: it.comp.lang.c++
Titolo: C++, strumenti per iniziare

Salve a tutti.
Programmo in c++ da un po' di tempo, adesso vorrei creare programmi che
utilizzano la scheda grafica. Vorrei sapere quali strumenti sono necessari
per creare un programma 2d o un motore 3d. Ci sono libri che trattano questo
argomento (magari in Italiano)?
Grazie anticipatamente


wrote:


Io non conosco libri in vendita ma molte guide utili.
Prima di tutto leggiti la sezione sulla scheda grafica in 2D nella sezione
di 
www.programmazione.it
 C/C++.
Per elaborare sistemi 3d abbastanza complessi ti consgilio di scaricare il
nuovo Direct X 8.0 SDK e relativa documentazione

argomento (magari in Italiano)?
Potresti provare su it.comp.giochi.sviluppo . Li la domanda é
perfettamente attinente all'argomento trattato.
Il Ghenio
-----------
LOVELY SARA
Dal lunedi'al venerdi'su Italia Uno alle 8:10
Non perdetevelo...
-----------



Newsgroup: it.comp.lang.c++
Titolo: Utilizzo di un'interfaccia VB

Aiutoooooooooooo!
Ho un programma C++, a cui voglio aggiungere un'interfaccia scritta in VB.
Come posso fare?
Un bacione di ringraziamento
Linda

 Come posso fare?
Puoi aggiungere al tuo programma C++ la funzionalita` COM/Automation
che permettera` al tuo codice VB di accedere alle sue funzioni.
Ti consiglio di proseguire la discussione sul gruppo adatto, cioe`
it.comp.programmare.win32, trattandosi di problematiche tipiche,
appunto, di Windows a 32 bit.
Alex

Newsgroup: it.comp.lang.c++
Titolo: dynamic_cast

A cosa serve in c++
dynamic_cast< tipo >( )
???????
--
Ciao da Kleidemos
C++ Programmer
Visual C++ 6

A cosa serve in c++
dynamic_cast< tipo >( )


 dynamic_cast< tipo >( )
http://groups.google.com/groups?as_q=dynamic_cast&as_ugroup=it.comp.lang.c%2b%2b

 dynamic_cast< tipo >( )
Sostanzialmente a capire se è possibile (ed eventualmente effettuarla)
una conversione tra tipi facenti parte della stessa gerarchia di classi.
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg

Newsgroup: it.comp.lang.c++
Titolo: Chiudere delle applicazioni

ho la necessità di chiudere delle applicazioni da un programma realizzato in
Visual C++ 5.0.
da questo programma tramite la funzione WinExec() lancio, ad esempio,
l'applicazione calc.exe.
Come faccio a chiuderla dal mio programma?  qualcuno può aiutarmi?
Grazie comunque!

...

Forse potresti provare con il DDE ma non so dirti altro.
Newsgroup: it.comp.lang.c++
Titolo: array e costruttori

Diciamo che io ho una classe MyClass che ha due costruttori:
class MyClass
{
public:
int m_i;
MyClass(int i) : m_i(i)
{
}
MyClass(int a, int b, int c) : m_i(a * b* c)
{
}
};
Ora faccio:
MyClass a[] = { 0, MyClass(1, 2, 3) };
La domanda è: è lecito? Il compilatore (VC++ 8) non sembra lamentarsi.
La seconda domanda: ci sono garanzie su come verrà creato il tutto? Gli 
oggetti verranno creati "in place" oppure potrebbero venire creati "da 
qualche parte" e poi copiati con un copy constructor o qualcosa del genere?
E' importante perchè voglio sapere se posso fare qualcosa del tipo:
MyClass(int a, int b, int c) : m_i(a * b* c)
{
    (this - 1)->m_i++;
}
Ovviamente non è esattamente quello che voglio fare, ma ci va molto molto 
vicino...
Se ci sono garanzie che gli oggetti vengono creati in place allora è 
corretto. Se no chiaramente no.
--- bye 

 corretto. Se no chiaramente no.
Il fatto che possa funzionare non significa che sia corretto.
Ciao,
Nicola

 }
e chi impedisce che questo costruttore venga chiamato per "il 
primo" elemento dell'array, per il quale (this - 1) punta a 
memoria altrui o cmq non del tipo opportuno ?
Cioè, come fa un elemento del tuo array a capire, dal proprio 
interno, che posizione occupa nell'array stesso ? O come ha 
nozione del concetto stesso di array ?
ah .... ma poi compila ? this è un puntatore const, per cui non 
sarebbe necessario fare almeno un const_cast per ridefinire il 
tipo dell'espressione e consentire la modifica del valore ?
(io non ho provato a compilarlo)
ciao
Soviet


 di array ?
Evidentemente come per ogni classe anche la maniera di usare i metodi è 
importante. Non lo puoi usare così a casaccio.
Cmq in realtà uno dei parametri indica l'offset da usare... Quindi sarebbe 
più qualcosa del tipo
MyClass(size_t uOffset, int a) : m_i(a)
{
    (this - uOffset)->m_i++;
}
--- bye 

 }
Dal momento non solo non usi l'incapsulamento, ma addirittura dai la
falsa impressione di farlo, tanto vale che tu scriva in C, usando una
struct e una bella funzione che aggiorna tutti i membri dati m_i n
batteria.
Ciao,
Nicola
Newsgroup: it.comp.lang.c++
Titolo: [?] Accesso a un database

Ciao ragazzi!
Sono alle prime armi con Visual C++.
Ho un "piccolo" problema: come da oggetto non riesco ad utilizzare
correttamente le classi per accedere ad un database (CdbDBEngine,
CdbDatabase, CdbRecorset).
Per esempio, ho trovato il seguente codice all'interno dell' MSDN:
     CdbDBEngine dbeng;
     CdbDatabase db;
     CdbRecordset rstTitles;
     // Open the database.
     db = dbeng.OpenDatabase(_T("Biblio.mdb"));
     // Open a recordset on Titles table.
     rstTitles = db.OpenRecordset("Titles", dbOpenSnapshot);
     if (rstTitles.GetRecordCount() > 0)
        {
        rstTitles.FindFirst("Title Like '*VBSQL*'");  // Any title on VBSQL
        while (rstTitles.GetNoMatch() == TRUE)
        {
        printf("%s\n", rstTitles.Fields[_T("Title")]);
        rstTitles.FindNext(_T("Title Like '*VBSQL*'"));
        }
        }
     else
        {
        printf("No such title\n");
        }
     db.Close();
L'ho incollato all'interno dell'evento click di un normalissimo bottone, ma
mi ha generato diversi errori, tra cui:
Compiling...
Ultimo2Doc.cpp
C:\Programmi\ultimo2\Ultimo2Doc.cpp(48) : error C2065: 'CdbDBEngine' :
undeclared identifier
C:\Programmi\ultimo2\Ultimo2Doc.cpp(49) : error C2065: 'CdbDatabase' :
undeclared identifier
C:\Programmi\ultimo2\Ultimo2Doc.cpp(50) : error C2065: 'CdbRecordset' :
undeclared identifier
Ultimo2.exe - 3 error(s), 0 warning(s)
Come posso risolvere tale problema?
Ringrazio tutti, Manu.

 undeclared identifier
A occhio, parrebbe che tu ti sia scordato qualche #include...
Massimo

 Massimo
Ciao Massimo, purtroppo non credo che sia questo il problema, dato che
l'MSDN mi ha suggerito di includere <Dbdao.h> e <Afxole.h>.
Quale altro fattore credi possa essere?
Ti ringrazio ancora per la tua disponibilità.
Ciao Manu

 wrote in message 8rfcce$7qm$1...@nslave1.tin.it...


Newsgroup: it.comp.lang.c++
Titolo: Libreria sulla DISTRIBUZIONE GAMMA

Qualcuno possiede qualche libreria sulla Distribuzione Gamma?
Mi serve per la mia tesi di laurea.
Vi ringranzio in anticipo sull'aiuto che mi potrete dare.
agostino...@tiscalinet.it

> Qualcuno possiede qualche libreria sulla Distribuzione Gamma?
No, ma se hai la funzione della funzione cumulativa e riesci a calcolarne
l'inversa (anche approssimata), puoi generarla calcolando tale funzione
(l'inversa) sui punti che ti genera una distribuzione uniforme come quella
standard del linguaggio.
Ovviamente devi prima ricondurti ad un dominio [0,1].
--
Alessandro Monti

Newsgroup: it.comp.lang.c++
Titolo: guida programmazione avanzata c\c++

Salve a tutti, vorrei che mi consigliaste un libro dove vengono trattati 
oltre che le funzioni base , anche la programmazione avanzata nel linguaggio 
c++ e con possibili riferimenti anche al c 

 c++ e con possibili riferimenti anche al c
Prova a guardare nella FAQ:
http://www.emagsoftware.it/faqcpp.htm#7
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg
The EMG Music page:         
http://www.emagsoftware.it/emgmusic
Newsgroup: it.comp.lang.c++
Titolo: Funzione che capisca se una std::string contiene un numero

Ciao!
Come da titolo ho una stringa e devo sapere se nella stringa c'è un
numero. Passando una string alla funzione, questa ritornerà true se ha
trovato un numero dentro di essa o false in caso contrario, del tipo:
bool check_number(std::string str) { /* .... */ }
Avevo pensato di fare un tokenize, dividendo la stringa in singole
parole e metterle dentro un vector. Da qui poi utilizzare l'atoi (dopo
trasformazione della stringa in char[]).
Non sono però sicuro se atoi è la funzione migliore per sapere se una
parola è un numero. Esiste un modo più veloce e semplice?
Grazie,
ramar

 parola è un numero. Esiste un modo più veloce e semplice?
Se vuoi convertire una stringa in un numero c'è boost::lexical_cat
Ciao
  Andrea

Ho fatto questo, sembra funzionare. Che dici?
	void Tokenize(const string& str,
                      vector<string>& tokens,
                      const string& delimiters = " ")
	{
		// Salta il delimitatore all'inizio
		string::size_type lastPos = str.find_first_not_of(delimiters, 0);
		// Trova il primo "non-delimiter".
		string::size_type pos     = str.find_first_of(delimiters, lastPos);
		while (string::npos != pos || string::npos != lastPos)
		{
			// Trovato un token, aggiungilo alla lista
			tokens.push_back(str.substr(lastPos, pos - lastPos));
			// Salta delimitatore
			lastPos = str.find_first_not_of(delimiters, pos);
			// Trova il prossimo non delimitatore
			pos = str.find_first_of(delimiters, lastPos);
		}
	}
	bool contain_number(string str)
	{
		vector<string> tokens;
	    Tokenize(str, tokens);
		vector<string>::iterator iter;
		for( iter = tokens.begin(); iter != tokens.end(); iter++ )
		{
        //se il token è convertibile in un numero, return true
			if (atoi((*(iter)).c_str())) return true;
		}
        //se nessun toker è un numero, return false
		return false;
	}

 Ho fatto questo, sembra funzionare. Che dici?
Spiega meglio cosa vuoi fare... se vuoi che la funzione ritorni true se 
una stringa contiene un numero, senza tante menate basta un
bool string_has_number(string& str) {
	if (str.find_first_of("0123456789", 0, 10) == str::npos) {
		return false;
	} else {
		return true;
	}
} 
Ciao
  Andrea

 	if (str.find_first_of("0123456789", 0, 10) == str::npos) {
str.npos, ovviamente :)
Ciao
  Andrea
Newsgroup: it.comp.lang.c++
Titolo: Overload tipo di ritorno

E' vietato fare due funzioni con stesso nome e stessi argomenti che 
differiscono solo per valore di ritorno (13.1/2) ma il mio compilatore 
(MSVC 2008) e anche il comeau online accettano questo:
void foo()
{
}
template <typename T>	
T foo()
{
  return 0;
}
int main()
{
  int a = foo<int>();
  foo();
  return 0;
}
Lo spirito mi sembra giusto: la foo template richiede all'utente di 
specificare il tipo, quindi non c'è ambiguità.
Tra l'altro questo è proprio il meccanismo che viene usato per fare dei 
cast definiti dall'utente (o meglio dalle librerie). Vedi ad. es. 
boost::any_cast
Ma secondo lo std e' corretto? Perchè stando al citato 13.1/2 dovrebbe 
non esserlo. O forse la versione template non viene considerata 
overload? allora come è giusto chiamarla?
GM

 considerata overload? allora come è giusto chiamarla?
IMHO sono proprio due funzioni diverse. Tra l'altro per come funziona 
la risoluzione dei nomi in C++, la versione templatica non viene 
nemmeno presa in considerazione in questo caso.
Sto andando a memoria, eh.
Cioè IMHO il gioco è che *di fatto* il 'nome' della funzione sarebbe
"foo<int>" etc (poi il nome a basso livello è un altra cosa ancora, 
parlo di 'livello logico').
Questo con la pigrizia per non andare a trovare lo standard. Comunque 
ricordo su un libro C++ letto relativamente di recente che faceva un 
esempio che mi pareva simile e lo dava per corretto. Direi potrebbe 
essere uno di Meyers oppure C++ Template Metaprogramming di 
Abrahams/Gurtovoy. Modulo il fatto che non ho tempo di controllare ora. 
Prendi le mie parole più come un 'puntatore a'.
-- 
In the practical world of computing, it is rather uncommon that a 
program, once it performs correctly and satisfactorily, remains 
unchanged forever.
Niklaus Wirth
Newsgroup: it.comp.lang.c++
Titolo: Problema con Visual C++

Problema: io sto scrivendo un gestionale in Visual C++ in cui faccio
abbondante uso di Edit Controls (uso che non posso ridurre). Il
problema è che il quantitativo di risorse utente che consumo sotto
Windows 9x è spropositato. Qualcuno ha qualche soluzione da proporre?
L'eliminazione del form quando non viene visualizzato non è una
soluzione valida (il programma è di tipo MDI, quindi potenzialmente a
schermo ci possono essere MOLTE finestre)…
Mesi fa avevo letto sulla knowledge base dell'MSDN un articolo (numero
Q80084) su come tenere in memoria solo il controllo attualmente in
uso. Peccato che non sia riuscito a trovare il file sorgente sul sito
Microsoft. Qualcuno ha un'idea di come venisse realizzato?
Saluti,
Max
(
xan...@geocities.com
)

Microsoft. Qualcuno ha un'idea di come venisse realizzato?
La tecnica e' generale... pensi forse che ogni singola cella
(usata o meno) di un foglio di Excel sia un campo di edit ??
In quel caso e' fondamentale fare in modo che i campi non
riempiti occupino *zero* anche se visivamente possono
sembrare oggetti reali. La parte che interagisce con
l'utente viene creata al volo quando necessario... eventuali
informazioni di stato vengono salvate in strutture piu'
snelle (o addirittura buttate se non c'e' nulla da salvare).
In questo caso l'oggetto "pesante" e' un control di Windows
(hwnd) ... ma il sistema e' valido in generale.
HTH
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff
Newsgroup: it.comp.lang.c++
Titolo: [Principiante] Porting da dos a windows di una vecchia procedura

Volevo fare il Porting da dos a windows di una vecchia procedura.
Forse la procedura esiste già, ma anche per imparare, sto tentando di
realizzare una procedura che calcoli il crc di una lista di file.
Il funzionamente deve essere simile al pkzip a riga di comando.
Come argomenti riceve la path del file di input, la path del file di
output e un parametro che indica la lunghezza massima ammessa 
per le path
Nota: Il file di input è una semplice lista in formato testo dei file
di cui deve fare il CRC mentre il file di output e la stessa lista a
cui alla fine viene aggiunto il valore di CRC
c:> MakeCrc inputfile.crc outfile.crc 80
Il gioco in dos funzionave benissimo. e mentre lavora mi da l'output a
video del file corrente
Per fare lo stesso lavoro sotto windows non ho utilizzato la MFC ma ho
provato direttamente con la winmain, una finestra e la funzione di
callback di quella finestra.
Ha parte il problema dello scroll  che trovo la maniera di risolvere.
Il mio problema reale e dove mettere il richiamo alla mia procedura.
In Tutti gli esempi che o visto i conti vengono fatti nella WM_PAINT
Ho provato anche io, ma cosi facendo se il file da controllare è lungo
la finestra rimane bloccata senza rigenerare l'output fino al termine
della mia procedura di controllo.
Vorrei lanciarle in maniera indipendente.
La mia procedura dovrebbe riempire il file outfile.crc
senza influire sul refresh della finestra. é possibile?
Mi sono spiegato da cani. Perdonatemi
Ciao e grazie delle eventuali risposte

> Ciao e grazie delle eventuali risposte
Questo non è il gruppo giusto per questo tipo di domande, devi postarle su
it.comp.programmare.win32.
In ogni caso il tuo problema potrebbe essere risolto in due modi:
1) Soluzione ideale: crea un thread distinto per l'interfaccia utente e per
la parte di calcolo (normalmente tutti i programmi per windows sono fatti in
questo modo)
2) Soluzione tampone: nella tua ruotine di calcolo ogni tanto svuota e
processa la coda dei messaggi.


Può funzionare, ma odio rovinare il codice di una routine pulita e
performante come quella che avevo sviluppato.
e' ad ogni modo, a parte la mia routine, l'esigenza di avere una
finestra con comportamento similare a quella del dos l'ho sentita più
di una volta. la prima soluzione mi risolve il problema. la seconda
richiede sempre modifiche scomode al programma principale.
Newsgroup: it.comp.lang.c++
Titolo: ALGORITMO

Sapete dirmi come posso risolvere questo problema (vi lascio l'intera
traccia) ?
/* Aggiungere al programma fornito:
- un metodo procedura 'inverti_coppie' alla classe 'list' che
scambia di posto l'elemento di posizione i con l'elemento di
posizione i+1 (i = 2, 4, 6, ... ). Il metodo lascia invariato
l'eventuale primo elemento. Se la lista ha lunghezza pari il
metodo lascia invariato anche l'ultimo elemento.
- la chiamata al metodo 'inverti_coppie' nel programma principale
Il metodo 'inverti_coppie' deve usare, direttamente o
indirettamente, un algoritmo ricorsivo.
N.B. Non e' consentito modificare il codice fornito. */
# include <stdio.h>
# include <stdlib.h>
struct nodoL;
class list {
  nodoL *head;
public:
  list ( ) { head = 0; }       // inizializza a lista vuota
  void push ( int x );         // inserisce x in testa
  void print ( );              // stampala lista
  // INSERISCI PROTOTIPO DEL METODO inverti_coppie
};
struct nodoL {
  int info;
  list link;
};
void list :: push ( int x ) {
  nodoL *q = new nodoL;
  q->info = x;
  q->link = *this;
  head = q;
}
void list :: print ( ) {
  if ( head != 0 ) {
    printf("%d ",head->info);
    (head->link).print();
  }
}
// INSERISCI IL METODO inverti_coppie
void leggiLista ( list &l, char *nomefile ) {
  // legge la lista dal file nomefile
  FILE *fn;
  int x;
  if ( (fn = fopen(nomefile,"r")) == NULL ) {
    fprintf(stderr,"errore -- non riesco ad aprire il file di ingresso\n");
    exit(1);
  }
  while ( fscanf(fn,"%d",&x) != EOF ) {
    l.push(x);
  }
}
void main () {
  list l;
  leggiLista(l,"data1.dat");
  printf("Lista originaria\n"); l.print(); printf("\n");
  // INSERISCI QUI LA CHIAMATA AL METODO inverti_coppie
  printf("Lista modificata\n"); l.print(); printf("\n");
}

Magari studiando?
Ciao,
Nicola
Newsgroup: it.comp.lang.c++
Titolo: Problema numeri casuali

Ciao a tutti, ho un problema nella generazione di numeri casuali, se
utilizzo la srand in questo modo :
srand( (unsigned)time( NULL ) );
la mia funzione Rnd_num (Riporto sotto il codice) mi ritorna sempre lo
stesso numero, mentre se non la utilizzo ottengo si una sequenza di numeri
diversi ma ovviamente ad ogni esecuzione la sequenza si ripete.
Qualcuno mi può suggerire qualcosa?
Esiste un sistema per generare numeri pseudo-casuali anche non con
distribuzione uniforme?
unsigned int Rnd_num(unsigned int Max)
{
 unsigned int tmp;
 tmp=(unsigned int)(((float)(rand())/(float)(RAND_MAX))*Max);
 return tmp;
}
Grazie Ciao Simo

"Seldon" ha scritto
:
: Ciao a tutti, ho un problema nella generazione di numeri casuali, se
: utilizzo la srand in questo modo :
:
: srand( (unsigned)time( NULL ) );
:
: la mia funzione Rnd_num (Riporto sotto il codice) mi ritorna sempre lo
: stesso numero, mentre se non la utilizzo ottengo si una sequenza di numeri
: diversi ma ovviamente ad ogni esecuzione la sequenza si ripete.
: Qualcuno mi può suggerire qualcosa?
Devi chiamare srand UNA SOLA VOLTA prima di generare la sequenza
'casuale', quindi prima delle chiamate a rand().
:
: Esiste un sistema per generare numeri pseudo-casuali anche non con
: distribuzione uniforme?
La funzione qui sotto genera una sequenza che NON e` uniforme nella
maggioranza dei casi:
Max esce con frequenza 1/RAND_MAX,
mentre i numeri da 0 a Max escluso escono con frequenza quasi 1/Max.
per cui se Max != RAND_MAX non mi pare che la sequenza possa dirsi
uniforme.
:
: unsigned int Rnd_num(unsigned int Max)
: {
:  unsigned int tmp;
:  tmp=(unsigned int)(((float)(rand())/(float)(RAND_MAX))*Max);
:  return tmp;
: }
:
ciao
Massimo

Newsgroup: it.comp.lang.c++
Titolo: Aiuto newbie

Ciao a tutti,
sono nuovo nel mondo c++ e sto cercando di imparare quindi abbiate
pazienza se vi mando un quesito che per voi può risultare facile.
Vorrei fare un semplice programmino che copi le righe di un file di
testo su un vettore e le stampi al contrario.
Questo è il listato:
#include <iostream.h>
#include <string>
#include <vector>
#include <fstream>
using namespace std;
int main(){
    vector<string> v;
    ifstream in ("Prova.txt");
    string line;
    while (getline(in, line))
          v.push_back (line);
    for (int i=(v.size()-1); i<0; i--)
        cout << v[i] << endl;
}
Cosa c'è di sbagliato?
Grazie
Mirko

 Mirko
Nids
Newsgroup: it.comp.lang.c++
Titolo: Parametri di CDC::SelectObject() ?

Una domanda piuttosto ingenua, probabilmente, questa mia, comunque se
qualcuno più esperto di me in Visual C++ potrà chiarirmi gli sarò
grato.
Studiando queste righe di Visual C++ 6 : 
---------------------------- 
1 CBrush* pOldBrush = pDC->GetCurrentBrush(); 
2 CBrush br; 
3 br.CreateSolidBrush(RGB(255,255,0)); 
4 pDC->SelectObject(&br); 
<....> 
5 pDC->SelectObject(pOldBrush); 
----------------------------- 
visto che nella classe CDC SelectObject() è dichiarata come 
CBrush* SelectObject( CBrush* pBrush ); 
1. 
come mai la riga 5 ha come atteso un parametro puntatore (CBrush*
pOldBrush), mentre la riga 4 ha invece un reference SelectObject(&br)
?
Capisco che 
pDC->SelectObject(&br); 
può sempre valere come un puntatore all'indirizzo dell'oggetto br, 
mentre (*br) sarebbe certamente sbagliato e infatti non compila , 
tuttavia mi domando : 
SelectObject() è stata modificata qui con overload 
da SelectObject( CBrush* pBrush ) 
a 
SelectObject( &CBrush_object) 
per accettare un parametro &br invece di un CBrush* puntatore, 
o no ? 
Oppure, è possibile che una funzione come 
void mia_funzione(puntatore); 
accetti ugualmente un parametro puntatore o reference come
interscambiabili senza bisogno di overload ?
2. 
Ho anche notato che se scrivo invece 
pDC->SelectObject(br); 
cioè (br) al posto del "solito" pDC->SelectObject(&br); 
al compilatore va bene lo stesso ! 
E dunque, questo '&br' non è poi così necessario ?? 
Sembrerebbe di sì, visto che SelectObject(br) funziona ugualmente. 
E come fa allora a sapere di convertire (br) a (&br) ammesso che sia
questo ciò che avviene qui ?

 o no ?
Non hai capito molto i reference ed i puntatori vero?
Eccoti un ripasso:
- l'operatore & applicato ad una variabile (nel tuo caso br) passa alla
procedura l'indirizzo di br, ovvero un puntatore a CBrush, e quindi
verrà chiamata la procedura SelectObject(CBrush*) ok?
- per dichiarare che una procedura prende una referenza ad un CBrush
dovresti dichiarare la procedura in questo modo:
SelectObject(CBrush& )
Sostanzialmente i parametri ed i reference fanno due cose diverse, anche
se a prima vista sembrano identici.
In particolare i puntatori richiedono una sintassi diversa (dalle
variabili comuni) per essere utilizzati, vedi operatore * & e -> Inoltre
andrebbero usati quando è accettabile un puntatore NULL.
I reference sotto questo punto di vista si usano come le variabili
comuni, anche se sono un alias per una variabile, ovvero come i
puntatori si riferiscono ad un'altra variabile.
Ti consiglio comunque di leggerti un buon libro sul C++ che ti spiegherà
questi argomenti *molto* meglio di quanto possa fare io. Uno davvero
ottimo, se te la cavi con l'inglese, IMHO è "Thinking in C++",
liberamente scaricabile da 
http://www.bruceeckel.com/
Ciao!