mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c++
Titolo: Leggere ad un determinato indirizzo di memoria...

Ho la necessità di leggere il contenuto di un determinato indirizzo di
memoria (in particolare 0000:0408 che contiene l'indirizzo di LPT1).
Sotto DOS avrei scritto una cosa simile:
...
unsigned int far *ptraddr;  
ptraddr=(unsigned int far *)0x00000408;
...
eccetera.
Utilizzando lo stesso codice sotto windows 95 (utilizzando il VC++ 5)
il programma abortisce. Immagino il problema stia nel fatto che
windows usa la modalità protetta, ma io non so come funziona.
Qualcuno mi può aiutare?
GRAZIE
Daniele

Forse il problema e risolvibile alla radice usando le apposite funzioni
win32;
che ce devi fà ?

 wrote:

Come dicevo nel primo messaggio: dovrei scoprire l'indirizzo di LPT1
per poi mandarci dei dati. A proposito: non è che windows95 mi vuole
impedire anche di mandare dati alla parallela? Per DOS c'era la
funzione C++  outb()  mi pare che mandava ad un determinato indirizzo
un byte.

Se devi mannà dei dati alla parallella in win 32, non puoi usare le funzioni
di basso livello del DOS (specialmente su NT che si incavola come una iena e
ti mette 2 dita negli occhi ;-), ma puoi usare le funzioni di sistema come
OpenFile("LPT1:");
WriteFIle(..);
CloseHandle(..);

 wrote:


Purtroppo non posso perchè devo poter utilizzare anche i piedini di
controllo della porta. (Cioè non devo comunicare col solito protocollo
della stampante)
Ciao
Daniele

Newsgroup: it.comp.lang.c++
Titolo: problema di passaggio nome_file in fase di chiamata..

Ciao a tutti, mi son trovato di fronte ad un problema che non riesco a
risolvere, io ho bisogno che il nome del file che contiene i dati che
dovrà elaborare il programma che ho già fatto, venga dato in fase di
chiamata. ovvero scrivendo da prompt:
c:\\mio_programma nome_file_da_elaborare.
Pensavo bastasse scrivere il main così:  
"void main(char nome_file)" in modo che gli venisse passato ciò che
veniva digitato, ma così facendo mi legge cose assurde. Ho provato a
cercare su qualche manuale, ma non mi sono stati molto d'aiuto,
probabilmente si tratta di una stupidata, ma non so piu che fare. vi
prego aiutatemi!
Grazie a tutti per l'aiuto, ciao, Andrea

 prego aiutatemi!
si lo e' ... :-) strano che non ci sia nel manuale !
allora devi definire il main in questo modo
int main(int argc, char *argv[])
{
.....
}
dopo di che ti troverai in argc il numero di argomenti
passati a linea di comando.
Tieni presente che l'argomento "zero" e' il nome
del programma. Quindi se hai passato 3 argomenti
argc sara' uguale a 4.
Per gli argomenti, come stringhe di caratteri li troverai
in argv[1],.., argv[argc-1], mentre argv[0] e' il nome
del programma invocato.
esempio (in C)
#include<stdio.h>
int main(int argc, char *argv[])
{
   int i;
   printf("Hai specificato %d argomenti:\n", argc-1);
   for (i=0; i<argc; i++)
      printf("argv[%d] = %s\n",i,argv[i]);
   return 0;
}
ciao,
g.

 }
- Dario
Newsgroup: it.comp.lang.c++
Titolo: HELP OCX_ActiveX.........!

Ciao ha tutti.
Ho alcune domande?
E` vero che i componenti (per il momento io conosco solo quelli di delphi), 
tipo i bottoni, combobox, etc, etc, possono essere anche OCX?
E' vero che il nuovo standard per gli OCX si chiama ActiveX?
Se io  volessi scrivere dei nuovi componenti che fossero generali,
cioe` andassero bene per VB, VJ, VC++, C++ Builder, Delphi3, dovrei
scrivere un ActiveX?
Si puo` scriverli solo con VC++ 5.0?
Cosa dovrei imparare per poter scrivere nuovi componenti?
Dove posso trovare documentazione su libri o su web?
Grazie a tutti quelli che mi risponderanno hanche parzialmente (se possibile
per posta).
Michele.
so...@dei.unipd.it
--
Automatic posted from 
anna.dei.unipd.it
 [147.162.2.100]
via Mailgate Server - 
http://www.mailgate.org

Dove posso trovare documentazione su libri o su web?
su questo non so aiutarti molto, finora non ho avuto occasione di
scrivere controlli ActiveX.
Ciao
Gianpaolo Bottin
- Live Long and Prosper -

Dove posso trovare documentazione su libri o su web?
Io ho solo letto qualcosa sull'argomento ed ho provato a scrivere un
"piccolissimo" componentino con il VB5, quindi non mi ritengo un grande
esperto. Ti posso pero' consigliare un libro interessante che ho da poco
finito di leggere.
Non ricordo i dati precisi. comunque suonava cosi':
ActiveX con Visual Basic 5.0
Edizioni Mondadori Informatica
(ed. originale Microsoft Press)
Il libro e' in italiano.
Ciao.
Angelo.
Newsgroup: it.comp.lang.c++
Titolo: C++ builder e MatLab ...

Qualcuno è riuscito ad importare e usare le librerie Matlab dal
Builder ?
Help !!!! Ci devo fare una tesi all'università : |||

Se te la cavi con l'inglese, ti consiglio di provare a chiedere sul
newsgroup borland.public.cppbuilder.thirdpartytools, che e' gestito dal
server 
forums.borland.com
.
Mi sa che ci trovi la maggior concentrazione possibile di persone che
cercano di usare il C++Builder in congiunzione con altri prodotti.
Ciao,
Nicola
Newsgroup: it.comp.lang.c++
Titolo: Help on CTime

Ciao,
io ho definito una classe activity che ha un attributo del tipo CTime.
Poi ho fatto l'overloading dell'operatore di stream
<< per la classe activity.
se compilo con VC6.0 ottengo questo errore :
D:\MyProjects\ActiviProva\ActiviProva.cpp(48) : error C2679: binary '<<'
: no operator defined which takes a right-hand operand of type 'class
CTime' (or there is no acceptable conversion)
Error executing cl.exe.
ActiviProva.exe - 1 error(s), 0 warning(s)
dove e` lo sbaglio ?
Di seguito c'e` il pezzetto di codice utilizzato :
#include "stdafx.h"
#include <iostream>
#include <functional>
#include <algorithm>
#include <utility>
#include <afx.h>
using namespace std;
typedef CTime TIME;
//typedef unsigned int  TIME;
class Aactivity
{
 friend  ostream& operator<< (ostream& os, const Aactivity& A );
public:
    Aactivity(){};
    virtual ~Aactivity(){};
 void setFirstStartTime (TIME time)  {firstStartTime=time;};
    void setLatestEndTime  (TIME time) {latestEndTime=time;};
 TIME getFirstStartTime () const {return firstStartTime;};
    TIME getLatestEndTime  ()const {return latestEndTime;};
protected:
    TIME firstStartTime;
 TIME latestEndTime;
private:
};
ostream &
operator<< (ostream & ostr, const Aactivity & A)
{
 ostr << "A.firstStartTime =" <<  A.getFirstStartTime() << endl;
 return ostr;
}
int main(int argc, char* argv[])
{
    Aactivity A;
 cout << A << endl;
 return 0;
}
grazie , Mauro
-- 
Posted from 
milkshake.totalweb.net.uk
 [195.206.160.254] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Apparentemente non esiste un overload di '<<' che prenda per argomento
CTime. Per dettagli chiedi su it.comp.programmare.win32, che qui sei
fuori argomento.
Ciao,
Nicola





Il messaggio di errore dice che non e' 
definito


l'operatore di output verso ostream per un 
oggetto


di tipo CTime. 
La tua classe Aactivity infatti e'


definita 
correttamente ma 
l'oggetto 
MFC CTime prevede


output 
soltanto 
verso 
CArchive e CDumpContext (che 
non


sono 
derivati da 

ostream).


 


Per poter compilare devi definire la funzione 
di


output per CTime. Non serve che diventi friend 
di


CTime se usi solo funzioni pubbliche 
come


GetYear/Month/Day
 (cioe' non sono 
richiesti


cambiamenti dell'interfaccia 
della classe 
CTime)
.


 


HTH


Andrea
Newsgroup: it.comp.lang.c++
Titolo: VC++ compila anche in C ?

Ciao,
L'IDE VC++ incluso in VisualStudio6 compila in C++... puņ compilare in C ?
come devo fare ?
Ciao,
--
Carmine ( 
pikachu...@gmail.com
 (Togli la scritta NOSPAM) )
Webmaster di The Total Site (
http://www.tekkentag.altervista.org/
 )
Webmaster di SceptilePage (
http://www.sceptilepage.altervista.org/
 )
Account Messenger: 
thetot...@msn.com

 come devo fare ?
Si, puo', devi impostare in "settings" (credo, ora ho la versione 2005
che e' diversa) che vuoi usare il compilatore C e non C++.
Mi pare di ricordare che se nomini il file .c invece che .cpp usi in
automatico il compilatore C invece che quello C++.
Tommaso
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

si, bene, ho impostato Compilatore C ma nn mi fà rinominare il file in
nomefile.c !
come fare?
--
Carmine ( 
pikachu...@gmail.com
 (Togli la scritta NOSPAM) )
Webmaster di The Total Site (
http://www.tekkentag.altervista.org/
 )
Co-Webmaster di SceptilePage (
http://www.sceptilepage.altervista.org/
 )
Account Messenger: 
thetot...@msn.com

 come fare?
se imposti come compilatore quello che C allora compila in C anche se il 
file e' .cpp.
se invece non setti nessun compilatore predefinito allora guarda 
l'estensione e te lo compila in C solo se e' .c.
nel tuo caso dovrebbe gia' compilare in C.
Per rinominare un modo stupido e' cancellare il file dal progetto, ora che 
non appare piu' dovrebbe esisterere ancora il file nella cartella del 
progetto pero'. A questo punto rinomini il file con windows e poi lo 
ri-aggiungi al progetto. Sono sicuro ci siano modi migliori pero'!
Tommaso 

Ok.
--
Carmine ( 
pikachu...@gmail.com
 (Togli la scritta NOSPAM) )
Webmaster di The Total Site (
http://www.tekkentag.altervista.org/
 )


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

Non mi dà errore in quel punto.
Prova a correggere la riga successiva: manca una parentesi.
Comunque ti invio il file che io ho compilato con successo.

mi sapete dire che cosa ho sbagliato?
Il costruttore di default di complexe non inizializza il puntatore w e questo in generale
si traduce in una illecita dereferenzazione (quando usi operator->).
Paolo
----------------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
  e-mail: 
mar...@cli.di.unipi.it
 
----------------------------------------------------------
Newsgroup: it.comp.lang.c++
Titolo: Leggere double da file binario

Salve,
ho un problema per quanto riguarda i files binari.
Ho un file che è stato riempito di importi in euro in formato
double con visual basic. Il programma che stò cercando di fare
deve leggere questo file e riportare i prezzi in euro in una label.
Il problema è che non riesco a leggere i valori in double.
Il formato del file è semplice:
1 - è un file binario
2 - ogni riga contiene 1500 caratteri
3 - tra questi 1500 caratteri a partire dal carattere 1047
    ci sono i valori in euro.
4 - ogni valore in euro (quindi in double) è formato da 8 caratteri.
Come faccio per leggerli e memorizzarli in variabili double?
Grazie
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Come faccio per leggerli e memorizzarli in variabili double?
Quello che ti serve è la funzione fread del c
Bye bye
Antonio

Sicuro che e' un file binario ?
Te lo chiedo perche' io impazzii con una cosa del genere poi scoprii
che il VB salvava in formato testo e il casino me lo faceva la virgola
usata da VB come separatore decimale.
Ciao.
Newsgroup: it.comp.lang.c++
Titolo: Ottimizzare un ciclo...

Ciao!
Attualmente uso nel mio parser questa routine per ridurre al primo quadrante
un angolo (in radianti):
const double pi2 = 2 * acos(-1.0);
inline void reduce2firstsector(double& num) {
 while (num >= pi2) num -= pi2; // Angle higher than 2pi
 while (num <= -pi2) num += pi2; // Angle smaller than -2pi
}
Funziona, ma so che in linea di principio quando si opera su valori double č
consigliabile evitare di fare somme o sottrazioni successive. Pertanto vi
chiedo, č possibile sostituire i due cicli con qualche operazione che usi
moltiplicazioni o divisioni?
Non importa se sono piů lente, a me interessa soprattutto la precisione.
Grazie!
--
Kojak
vrke...@hotmail.com
http://space.tin.it/io/viscorci
Life would be much easier if I had the source code.

 un angolo (in radianti):
Oops! Mi sono sbagliato a scrivere! Il codice non serve a ridurre l'angolo
al primo quadrante, ma a ridurlo al corrispondente compreso tra 0 e 2pi...



 ha scritto:



if( num > 0 )
	num=fmod( num,pi2 );
else
	num=-fmod( -num,pi2 );

> num=fmod( num,pi2 );
Oh! Non sapevo esistesse la funzione modulo per i decimali! Grazie mille!


Grazie!
Ho fatto qualche prova e ho ottenuto i seguenti risultati:
1: 1.22461e-16 / 0 / 1.22461e-16
10: -1.22461e-15 / 0 / 1.22461e-16
100: 1.96479e-15 / 1.42109e-14 / 5.3646e-13
1000: -3.21413e-13 / 1.99074e-13 / 1.24167e-11
10000: -4.85642e-13 / 7.38964e-13 / 5.88002e-09
100000: -3.39602e-11 / 2.17143e-11 / 3.89792e-07
1000000: -2.23187e-10 / 1.00727e-10 / 4.8503e-06
10000000: 5.62096e-10 / 1.7867e-09 / 0.00758047
100000000: -3.90825e-08 / 2.68365e-08 / 0.262192
Il primo numero indica K, il secondo e' sin(K*pi2),
il terzo sin(reduce(K*pi2)) e il quarto sin(reduce2(k*pi2))
dove reduce2 e' la funzione basata su sottrazioni successive.
La riduzione basata su sottrazioni e' ovviamente molto piu'
lenta con numeri grandi: l'ultima riga ad esempio richiede
cento milioni di sottrazioni prima di ottenere il valore finale.
La prova e' stata fatta con BCC55.
HTH
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

Dunque, premetto che la soluzione è troppo semplice.. pertanto con
tutta probabilità non ho capito il problema. In ogni caso:
    //    a contiene l'angolo
a = fmod( a, 2*PI);
    //    a contiene l'angolo corrispondente nell'intervallo [ 0,
2PI];

 // a contiene l'angolo corrispondente nell'intervallo [0, 2PI];
Avevi proprio capito bene! Non sapevo esistesse la funzione modulo per i


     double fmod(double x,double y)
Grazie mille per l'aiuto! Non sapevo esistesse la funzione modulo tra double
(ero fermo agli interi :-)
Ciao e mi sa a presto!!!


Newsgroup: it.comp.lang.c++
Titolo: Sito comune ..

Esiste il sito comune relativo a questo newsgroup ?
Grazie ...
          Fabio

 wrote in message
817a5d$ij0$1...@nslave2.tin.it...
: Esiste il sito comune relativo a questo newsgroup ?
se non sbaglio no :(((((((
Newsgroup: it.comp.lang.c++
Titolo: stringhe bastarde!

sono nuovo del c++ e non riesco a gestire le stringhe...
1°   che operazioni si  possono fare su di esse? ad esempio c'è un metodo
che restituisce la lunghezza di una stringa?
2°   esiste qualcosa tipo una classe Stringa? (come in Java)
3°   bisogna per forza usare un ciclo per riempire una stringa? (possibile
che sia così?)
4°   se è così come si trova la lunghezza di un array? se ad esempio
definisco un array in questo modo: char x[23]
      si può trovare la lunghezza senza conoscere la dichiarazione?
      se invece la definisco così: char x[] e poi la riempio come posso
ricavare la lunghezza dell'array?
bo???
aiutatemi!!
mi hanno parlato di string.h...
cosa contiene esattamente questa libreria? fatemi qualche esempio di
funzione...
un pò di codice commentato perfavore...
grazie per la risposta ciao!

 ricavare la lunghezza dell'array?
Puoi sempre ricavare la lunghezza della stringa contenuta il quell'array,
dato che una stringa in C è per definizione "nul terminated" ovvero termina
col carattere '\0'. Basta cercare tale carattere nell'array, e scoprirai la
fine della stringa.
Però ciò può trarre in inganno:
char x[23];
int len;
strcpy(x, "ciao");
len = strlen(x);
printf("%d", len);
l'output di questo programma sarà 4, perche la stringa contenuta nell'array
x è di soli 4 caratteri.
Per ottenere la dimensione dell'array...bo ;))) a dire il vero non so se
esista un metodo standard.... any ideas?!
Per quanto riguarda il codice... vatti a vedere un manuale di C/C++ anche in
italiano: ce ne sono di ben fatti e spiegano molto bene questo genere di
cose.
Vedi qui: 
http://cpp.programmazione.it
Ciao,
Dome
--
------------------------------------------
Domenico Troiano
AI & 3D Coder TFS Project
www.panther3d.com
red...@panther3d.ath.cx
------------------------------------------

 funzione...
<string.h> e' un header (e per null'affatto una libreria); ed e'
tipico del C, non del C++.  I metodi dichiarati nell'header <string>
sono invece dedicati alla gestione delle string del C++ (std::string),
e descritti in qualunque testo base del linguaggio (tipo quelli che
trovi citati nelle FAQ).
-- 
Maurizio Loreti  - Linux Is Not UniX -  
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it
Newsgroup: it.comp.lang.c++
Titolo: [?] Parentesi graffe

Scusate la semplicità della domanda, ma voi come fate a fare venire le
parentesi graffe in W98 se queste non sono presenti nella tastirea
italiana?
Grazie
Igor
-----------------------------------------------------------
"We are such stuff as dream are made on"
William Shakespeare, "The Tempest"
-----------------------------------------------------------
Email: 
igor.ba...@imola.nettuno.it

 italiana?
ALT+123 graffaaperta
ALT+125 graffachiusa
--
Togliere ICEMAN dall'indirizzo per l'e-mail
Bye
   Nameci


Non lo so se funziona su tutte le tastiere italiane, comunque:
[AltGr]+[Shift]+[    = {
[AltGr]+[Shift]+]    = }
***
Anche se non e' stato chiesto (a qualcuno puo' servire):
ALT+126 = ~
Ciao, U D A.
-- 
<><><><><><><><><><><><><><><><><><><><><><><><
UDA'Software
mailto:
u...@freemail.it
mailto:
uda.so...@iol.it
http://www.GeoCities.com/SiliconValley/Bay/2165




Premetto che lavoro su NT Americano: per programmare configuro la
tastiera come americana, via Control Panel->Regional Settings (ovvero il
mappamondo...) e' possibile memorizzare piu' di una impostazione e
passare dall'una all'altra con Alt+Shift o un icona sulla barra. Dopo un
po' si imparano le posizioni dei tasti ed e' molto meglio di
Alt+tastierino, anche perche non ci sono solo le graffe...
Ciao,
Nicola Musatti
Newsgroup: it.comp.lang.c++
Titolo: convertire operazione su stringa stile C in C++

Salve,
come da oggetto, cerco di spiegarmi meglio con un esempio. In un certo file
c'è questo codice:
<code>
static char *myVal = NULL; /* inizializzato altrove con altra funzione */
char *defaultval (char *val, int len)
{
[...]
  if (val)
    {
      strcpy (val, myVal);
    }
  return myVal;
}
</code>
Volendo sostituire la funzione strcpy con quella che l'equivalente in C++,
come diventa il nuovo codice?
In un altro file ho fatto:
<code>
  char *trovato;
  string nomeid = "default";
  trovato = new char[nomeid.size() + 1];
  nomeid.copy(trovato, string::npos);
</code>
Ma nel caso della funzione sopra riportata non riesco.
Cheers,
-- 
F. Gr.


Come vedi, puoi facilemente usare
string ( const char * s, size_t n );
o
string ( const char * s );
senza bisogno di una finta inizializzazione e "default". Costruiscila
gia' con il valore giusto.
Per il resto per "copiare" una stringa in un altra stringa, puoi anche
usare semplicemente =.
-- 
-riko

 usare semplicemente =.
praticamente dovrei sostituire le istruzioni che operano sulle stringhe stile
C (strcpy) con la classe 'string' del C++...

 C (strcpy) con la classe 'string' del C++...
E cosa non va bene in quello che ti ho suggerito?
-- 
-riko

> Enrico Franchi wrote:

va bene. Thanks.
Newsgroup: it.comp.lang.c++
Titolo: Esistono standard e standard Microsoft?!?!?

Stavo facendo tranquillo tranquillo il mio programma (da consegnare
all'università ogni settimana...bla, bla,bla), e in un punto del piccolo
programmino appariva una cosa come questa:
for(int i=0;.....) {}
for(int i=0;.....) {}
Fiducioso delle mie capacità (?) vado a compilare, con quel bel ambiente di
sviluppo, pieno zeppo di costosi gingilli che è il MS Visual C++:
ERROR: ridefinizione della variabile i
Allora penso: "o cazzo, eppure il prof. aveva detto che la varibile "i"
sarebbe stata distrutta alla fine del ciclo, e oltre al prof lo pensavo
anch'io, e a quanto pare anche il libro sostiene questa tesi"...
...Il giorno dopo, parlando un po' con gli altri poveri sfigati (poveri
sfigati per altri motivi) del mio corso, capisco che la cosa è un po'
strana, infatti loro non hanno ricevuto nessun errore ed usavano il Dev C++
(software LIBERO) e il Borland Builder...e ho verificato di persona.
Ora il programma non utlizzava librerie particolari o componenti del VC++,
DOVEVA essere un semplice programmuccio (calcolo del punto di sella di una
matrice) che utilizzava SOLO il C++ STANDARD....
BOOOOHH...Illuminatemi...Chi è lo standard!?!
N.B. Se seguo Microsoft il mio prog viene considerato nullo (dato che da
errore in fase di compilazione)!

 ERROR: ridefinizione della variabile i
http://makeashorterlink.com/?E26332C42
-- 
Gerolamo
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

BOOOOHH...Illuminatemi...Chi è lo standard!?!
Secondo lo standard la variabile "i" cessa di esistere alla
fine del for. In passato (C++ pre-standardizzazione) pero'
la visibilita' della variabile restava sino alla fine
dello scope che conteneva il for.
Di default il compilatore VC++ utilizza la vecchia regola
di visibilita' ma esiste un flag di compilazione per attivare
il comportamento standard. Un problema e' che poiche' il
compilatore diventa piu' aderente allo standard anche in
altre parti diventa impossibile riuscide ad esempio ad
includere il file di header <windows.h> perche' contiene
questo sfrutta delle estensioni del linguaggio.
Un trucchetto per poter avere il "for" compatibile con
lo standard senza dover rinunciare alla possibilita' di
includere <windows.h> e' mettere in testa ai tuoi file
  #define for if(0);else for
HTH
Andrea

   #define for if(0);else for
Oppure dichiarare la variabile prima del for:
int j;
for(j=0; j<n; j++)
{
...
}
Newsgroup: it.comp.lang.c++
Titolo: tipo nome_variabile&

Prima di tutto grazie per la risposta.
I riferimenti non hanno la & posta all'inizio del nome della variabile?
E' indifferente la posizione o esiste una differenza?
Maurizio
hil...@tin.it

 E' indifferente la posizione o esiste una differenza?
Ha senso solo immediatamente dopo il tipo; se no, errore sintattico.
Alex

I riferimenti non hanno la & posta all'inizio del nome della variabile?
deve essere messa tra la fine dell'identificatore di tipo e l'inizio
dell'identificatore di variabile:
T& var;
T &var;
T & var;
nota che & si applica solo all'identificatore di variabile che
precede:
T& var; var2;
var2 non e` un reference.
La scelta tra le 3 notazioni e` solo questione di stile
(e molto soggettiva). (***IMO***) La prima forma  mette in evidenza
il fatto che il tipo di var e` "reference a T", mentre la seconda
che il modificatore & si applica solo a var.
Personalmente preferisco la prima, ma ho anche l'abitudine di
utilizzare una riga per ogni dichiarazione.
Paolo
--------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
--------------------------------------------------
Newsgroup: it.comp.lang.c++
Titolo: conversione da string a char *

come da oggetto. è possibile ?
se sì, come ?
Grazie
Matic

 Matic
:)

 char* str=miastringa.c_str();
non proprio. c_str () restituisce un char const*, che non č convertibile
in un char* (perderebbe la const-ness). Se ti serve un char*, l'unica
soluzione č copiare la stringa in un buffer e poi usare quello.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Propongo:
string pippo="pippo";
char buff[(size_t)pippo.length()];
memcpy((void *)buff, (size_t) pippo.length(), pippo.c_str());
//oppure se ti serve il carattere di fine stringa '\0'
char buff[(size_t)pippo.length()+1];
sprintf(buff,(size_t) pippo.length(),pippo.c_str()); 
Correggetemi se sbaglio ...


 sprintf(buff,(size_t) pippo.length(),pippo.c_str()); 
anche questa č proprio sbagliata, sprintf richiede un altro parametro dopo
buff:
sprintf (buff, "%s", pippo.c_str ());


 soluzione č copiare la stringa in un buffer e poi usare quello.
Vero, mi correggo:
const char* str=miastringa.c_str();
ti assegna l'indirizzo del buffer di caratteri di mia stringa al puntatore
str (che perň č costante, cioč lo puoi usare solamente in lettura).
In effetti non mi ero posto il problema della copia in un buffer di
caratteri, in quanto davo una risposta concisa allo specifico problema (poi
per copiare la stringa in un array, penso che l'approccio piů logico sia
creare quest'ultimo con un new e poi copiarci il risultato di c_str() con
una strcpy, in quanto non č nota in fase di compilazione la dimensione del
buffer da allocare)

 char* str=miastringa.c_str();
Bruttissimo... a parte che la conversione da const char* a char* va 
(giustamente) forzata, ma non č un caso che il ritorno di c_str() sia const 
visto che č il puntatore ad un buffer gestito internamente.
 

 sizeof(string::size_type).
Hum, non ti seguo... non e`  che ti sei confuso con sizeof()? Quello che
viene fatto e` un cast a size_t.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Sono un mirabile incrocio tra Tarzan e Giacomo Leopardi.
In me convivono tutte le doti intelluttuali di Tarzan e
tutta la prestanza fisica di Giacomo Leopardi.
A. Borsani

 viene fatto e` un cast a size_t.
eh già... :-)
comunque non funzionerebbe lo stesso perchè pippo.length () non è una
costante al momento della compilazione (a meno di estensioni
particolari del compilatore, come nel caso del GCC).

Newsgroup: it.comp.lang.c++
Titolo: Database relazionali in C++Builder

Vorrei sapere come fare ad ordinare una tabella (Paradox) relazionata 1 a
molti in base
la relazione è basata su un codice
l'ordinamento della parte 'molti' invece vorrei che fosse su campi diversi
I risultati ottenuti sono i seguenti:se utilizzo table riesco a
relazionare in modo da poter modificare i dati ma non riesco ad ordinare la
parte molti
se utilizzo query riesco a relazionare in modo da poter visualizzare i dati
ordinati come li voglio ma non sono più modificabili!
Se qualcuno mi potesse aiutare ...
Grazie

...



Newsgroup: it.comp.lang.c++
Data: mercoledì 27 gennaio 1999 0.37
Oggetto: Re: Database relazionali in C++Builder

Newsgroup: it.comp.lang.c++
Titolo: Array di tipo sconosciuto

Ciao a tutti,
sono nuovo di questo forum. Avrei bisogno di un info riguardo al C++
(o al Borland).
Ho la necessità di creare una funzione che generi e riempia un array
di tipo sconosciuto. Mi spiego: devo andare a leggere l'header di un
file, dall'header determinare il tipo dei dati che dovrò andare a
leggere, passare il tipo di file come parametro in ingresso alla
funzione, inizializzare e riempire l'array leggendo il file, e
restituire l'array.
Ad esempio: supponiamo che dall'header del file legga che i dati da
mettere nell'array sono di tipo short. Do quest'info alla funzione
(che perciò dovrà avere in ingresso un parametro che indica il tipo di
array) la quale inizializza l'array (cioè farà una cosa del tipo:
tipo_array array[128][128]), legge i dati dal file e riempie l'array e
lo restituisce.
La domanda è: come deve essere fatta la funzione affinchè possa
restituire un array di qualunque tipo (cioè a priori sconosciuto) e
come posso  creare durante l'esecuzione un array di tipo qualunque (in
funzione del parametro in ingresso)?
Il prototipo di dichiarazione dovrebbe essere una cosa così:
array_restituito funzione(int parametro sul tipo, altri parametri)
{
         ...
}
Grazie! Fatemi sapere!


Salve,
Si può' usare un'insieme del tipo boost:any.
Per un esempio di inserimento e estrazione dei dati, vedi:
http://www.boost.org/doc/html/any/s02.html
Saluti.

 Grazie! Fatemi sapere!

 
domenico.aqu...@gmail.com
 ha scritto:

Passiamo all'atto pratico perchè vorrei capire meglio. Supponiamo che
durante l'esecuzione della funzione abbia letto dal mio header che la
matrice che dovrò andare a leggere dal file sarà di tipo short e che è
di dimensione 128x128. Durante l'esecuzione dello script perciò dovrò
chiamare una funzione che mi crei un array di tipo pari al tipo
passato nella funzione di dimensione 128x128. Sarà una cosa di questo
tipo?
matrice_di_ritorno **Funzione(int tipo, int dx, int dy)  --> La mia
domanda è: cosa scrivo? void **Funzione(...) o unsigned short
**Funzione(...) o altro?
{
        // dove dx=dy=128
       /* L' if dopo è consentito?
       if (tipo==1)
       {
               unsigned short **m=new unsigned short [dx][dy];
       }
       else if (tipo==2)
       {
               int **m=new int [dx][dy];
       }
       // Qui avremo un FileOpen...
       for (int i=1;i<=dx;i++)
       {
                for (int j=1;j<=dy;j++)
                {
                           FileRead(handle,(????? qui che ci metto?*)
m[i][j],sizeof(qui???)*1);
                }
       }
       return m;
}
Immagino il codice sia sbagliato in molti punti. Qualcuno mi illumini
please!!!
Inoltre vi chiedo un'altra cosa: al posto dei due for posso mettere:
FileRead(handle,(...*) m,sizeof(...)*dx*dy)?
Grazie mille ;)

 Grazie mille ;)

Newsgroup: it.comp.lang.c++
Titolo: DevC++ e DirectX

Salve, è possibile sviluppare applicazioni in DirectX con questo free
compiler?
Grazie tutti

Con le DX non ho mai provato, ma con le OpenGL mi sembra di ricordare
che funzioni . . .
Ciao.
HS_
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG
Newsgroup: it.comp.lang.c++
Titolo: Motore 3d

Salve a tutti,
sapreste indicarmi un sito o dei riferimenti per la realizzazione di
un motore 3D in Visual C++ 6.
 
Grazie anticipatamente.

Ciao,
Questo newsgroup si occupa del linguaggio C++ in quanto tale, e non di
aspetti specifici di particolari implementazioni. Per questo non e' il
posto piu' adatto per porre domande specifiche come la tua.
Potresti avere piu' fortuna su uno dei seguenti gruppi:
Per Win32 (95, 98, NT): it.comp.programmare.win32
Per Dos/Win 3.x: it.comp.os.dos
Per Linux:      it.comp.os.linux.development
Per C++Builder: i gruppi borland.public.cppbuilder.*, disponibili sul
                server 
newsgroups.borland.com
 (prevalentemente in 
                inglese, ma si puo' postare anche in italiano)
Grazie,
Nicola Musatti

Newsgroup: it.comp.lang.c++
Titolo: C++ Primer 3°edizione

Qualcuno sa' se è disponibile anche la versione in Italiano ????
Grazie

NO


Newsgroup: it.comp.lang.c++
Titolo: Grafi orientati

Qualcuno mi sa dire se nel C++ standard esiste già una o più classi per la
gestione di grafi (al massimo ad renderli orientati suppongo che basterebbe
farne una classe derivata e qualche cambiamento)? Altrimenti, non ne esiste
qualcuna di già fatta e collaudata (magari se qualcuno me la passa, non
piango ;) ).
--
* * * * * * * * * * * * *
Ertai, wizard Adept
... Energy derives from both the plus and negative ...

piango ;) ).
Ho appena trovato una libreria potrebbe fare al caso tuo (che sembra
assomigliare al caso mio) 
http://www.infosun.fmi.uni-passau.de/GTL/
Anche la documentazione non è male
ciao
== Aldo Brucale =====================================

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

per tutti gli amici che amano il c++, ma dove si trovano i capitoli 
tradotti in italiano del libro 'thinking c++'
crazie a tutti giovanni.

 ha scritto nel messaggio
news:9dp4am$dj6$2...@pegasus.tiscalinet.it...


 del thinking in c++.
quarta edizione? ma come è possibile, io sono fermo ancora alla seconda,
neanche completata! ma stiamo parlando del libro di Bruce Eckel vero? no
perchè a quanto pare (
http://www.mindview.net/Books/
) non se ne è accorto
neppure lui di aver scritto già la terza ;-)
--
----------
Lello Mele
c/o VTM VideoTecnica Mele
Via San Sebastiano, 22
84036 Sala Consilina (SA)
Cell.:0347/643.35.25
HOMEPAGE:
http://www.lellomele.supereva.it
eMAIL:
v...@libero.it
me...@programmazione.it
-------------
"Esistono due modi per elaborare il progetto di un software.
 Il primo consiste nel renderlo semplice al punto tale che non
 manifesti lacune evidenti. Il secondo consiste nel renderlo
 complicato al punto tale che non manifesti lacune evidenti.
 Il primo metodo e' di gran lunga piu' difficile." [C.A.R. Hoare]

del thinking in c++.
??? e la terza ???
--
Walkie...@Libero.It (ICQ# 8143647)


La situazione qual'e'? Ho visto che sono tradotti e disponibili 5 dei primi
sei capitoli. Gli altri sono in traduzione?
Stefano

sei capitoli. Gli altri sono in traduzione?
Disponibili dove?

 Stefano
Dove li hai trovati?
Newsgroup: it.comp.lang.c++
Titolo: visual c++

ho il compilatore visual c++ 6.0
dove posso trovare delle informazioni per iniziare
Ciao
Sergio


wrote:


Newsgroup: it.comp.lang.c++
Titolo: ComboBox in VC++

> 
http://www.geocities.com/sunsetstrip/stage/7787
 <<
<<<<<<<<<<<< 
DucaCr...@iol.it
 >>>>>>>>>>>>>>

poterci inserire le stringhe che dovranne esservi visualizzate?
No, _puoi_ fare InitStorage ma e` solo una ottimizzazione (alloca
lo spazio tutto in una volta invece che a tocchetti successivi), NON
e` necessario chiamarla per il corretto funzionamento.
Piuttosto, sembra probabile che tu abbia fatto qualche errore in
termine di _dove_ chiami le AddString sul tuo m_Combo (o comunque
tu lo abbia chiamato).
Per verificare, ho fatto un progettino-giocattolo con AppWizard,
applicazione dialog-based, ho aggiunto al dialogo il solo combobox
stile droplist, con classwizard ho aggiunto la variabile m_cb in sua
corrispondenza, e come unico codice aggiunto, nella OnInitDialog,
ho inserito le righe:
 // TODO: Add extra initialization here
    m_cb.AddString("Primo");
    m_cb.AddString("Secondo");
    m_cb.AddString("Terzo");
    m_cb.AddString("Quarto");
    m_cb.AddString("Quinto");
(riporto il commento iniziale, generato dal Wizard, per chiarire DOVE
ho messo queste righe nell'OnInitDialog).
E tutto funziona alla perfezione, come previsto: il combo, cliccato,
mi propone queste cinque "scelte".
Suggerimento: ripeti questi passi (2 minuti d'orologio), e se, come
penso, anche a te funzionano, allora esamina il tuo vero codice per
vedere come e in cosa differisce -- ad esempio, chiamate alla
AddString fatte "troppo presto", o che so... facci sapere!
Alex


Il problema non era nel codice (la AddString() la facevo ben dopo che il
dialogo fosse stato creato) ma nell'editor delle risorse del VC++.
Il problema era nella dimensione del combo box che era troppo "basso" nel
senso che non aveva spazio per far apparire la lista sotto di se.....
Però non ho capito bene come funziona perchè quando inserisco un controllo
di tipo combobox in un dialogo, questo può essere dimensionato solo in
larghezza e non in altezza... comunque smanettando un po', non so come, ad
un certo punto sono riuscito a dimensionare il dialogbox anche verso il
basso, ed ora funziona.
Però non ho capito comunque come si faccia..... c'è una combinazione di
tasti particolari per poter dimensionare il combobox in altezza?


Ciao,
effettivamente, questo problema capita spesso, perche' l'altezza impostata
dall'editor delle risorse e' insufficiente a visualizzare almeno una
stringa, comunque, per regolare la lunghezza della "tendina" della combo box
nell'editor delle risorse, dopo aver inserito la combo, fai un click sulla
freccia dell combo stessa, per capirci quella preposta ad aprire la tendina,
e magicamente, la selezione comprendera' anche quest'ultima, ora con i
soliti metodi di dragging...
ciao, Franco.
Franco Torrini - Software Engineer - 
f.to...@virtuart.it
VIRTUART - C.C.D. Creative Computer Design S.p.A.
Via di Quarto Annunziata, 80/b - 00189 Rome, Italy
Tel. 
+39 06 33076638
 - Fax. 
+39 06 33076670
Web: 
http://www.virtuart.it

Newsgroup: it.comp.lang.c++
Titolo: esercizi di calcolo numerico in c++

Salve a tutti...
qualcuno di voi saprebbe dirmi se è possibile trovare programmi in c++
(ma anche in qualche altro linguaggio) per la risoluzione di esercizi
di calcolo numerico. Per chi ne capisse qualcosa devo risolvere un
problema di cauchy (con metodo di eulero e runge-kutta di ordine 4) e
individuare la decomposizione di una matrice con il metodo di pivoting
parziale. Servono per un esame universitario
Se qualcuno potesse aiutermi ne sarei riconoscente a vita...
Grazie a tutti per l'aiuto 
Simone


prova e cercare per "netlib" non garantisco nulla pero'
oppure cerca "numerical recipes" di certo esiste la versione del libro 
in C , forse anche quella in C++ .
in ultimo puoi provare a cercare tra i sorgenti di "octave" e/o "scilab"

 in C , forse anche quella in C++ .
Esiste. E si possono anche scaricare i capitoli che interessano in PDF o 
PS (ora non ricordo il sito).
  bye
	av.

grazie a tutti mi metto subito a cercare e vedo cosa riesco a
trovare....
Siete stati efficentissimi

Newsgroup: it.comp.lang.c++
Titolo: Come posso creare un suono data una frequenza?

Come da oggetto?
Ciao Gabry

Il C++ non prevede niente per i suoni, bisogna 
affidarsi a soluzioni specifiche dipendenti dalla
piattforma (es. scrivere su /dev/audio, programmare
la scheda audio, chiamare qualche libreria, ...).
Per informazioni piu' specifiche:
  it.comp.os.linux.development
  it.comp.programmare.win32
Se per creare il suono indendi solo creare i campioni,
e non suonarli, basta una cosa del tipo
  double k = ...; // dipende dalla freq. del suono
  // e dalla freq. di campionamento
  for (int i = 0; i < numero_max_di_campioni; ++i) {
    campione[i] = volume * sin( k * i );
  }
	Mauro

Come da oggetto?
Non credo che il C++ possa aiutarti molto. Perché non provi ad
installarti GoldWave? Esso,fra le altre cose, ti mette a disposizione
una serie di funzioni in grado di generare dei suoni utilizzando le
opportune formule matematiche. Questo tipo di quesiti rimane comunque
fuori tema in un newsgroup dedicato al C++.
Il Ghenio

>
Saresti OT (almento credo) comunque:
se usi Windows c'e' la funzione Beep() che funziona solo su NT.
Io ho usato un vecchio metodo che funzionava in DOS e funziona anche in Windows 9x.
Se vuoi il codice scrivimi sulla mia casella (togli REMOVETHIS).
Antonio
Newsgroup: it.comp.lang.c++
Titolo: Liste

>>>>>>>>>>>>

 elementi variabile)?
Che ne dici di std::list? E' standard, potente e in genere efficiente.
Domenico Barra


Anche se non sono esperto di memoria dinamica e liste di
scrivol'implementazione di una semplice lista
LIFO , sperando che i più esperti correggano i possibili errori e problemi.
#include <stdlib.h>
#include <iostream>
class Nodo{
public:
 int dato;
 Nodo *next;
};
class Lista{
private:
 Nodo *Head;
public:
 Lista(void) :Head(NULL), Tail(NULL) { }
 ~Lista();
 void Append(int);
 int GetLast() const;
 void DeleteLast();
};
Lista::~Lista()
{
 Nodo *temp;
 while((temp = Head) != NULL)
 {
  Head = Head->next;
  delete temp;
 }
}
/*per deallocae la lista si assegna un nodo ad una variabile temporanea
e poi si dealloca questa. Infatti se avessi deallocato direttamente la testa
avrei
perso il riferimento ad essa, e a tutta la lista*/
void Lista::Append(int info)
{
 Nodo *temp = new Nodo;
 temp->dato = info;
 temp->next = Head;
 Head = temp;
}
/*il nuovo dato da inserire va immesso in un Nodo dopo aver allocato
ques'ultimo
, poi si posiziona il Nodo alla fine della lista(cioè temp->next = Head), e
quindi il Nodo
diventa la testa(Head =  temp)*/
int Lista::GetLast()const
{
 return Head->dato;
}
void Lista::DeleteLast()
{
 Nodo *temp = Head;
 Head = Head->next;
 delete temp;
}
/*come per il distruttore. Attento che temp non va allocato come in vece ho
fatto in Append(int)
perche' in questo caso il puntatore viene assegnato. Se lo avessi prima
allocato e poi assegnato
oltre che aver fatto un operazione inutile, avrei perso la possibilita' di
deallocare la memoria del nodo
perche' dopo l'assegnamento si perde il riferimento alla memoria
precedenetemente allocata.*/
void print(Lista &s)
{
 for(int i = 0; i < 50; i++)
 {
   cout << s.GetLast() << " ";
   s.DeleteLast();
 }
}
int main()
{
 Lista s;
 {
  for(int i = 0; i < 100; i++)
   s.Append(i);
 }
 print(s);
 print(s);
 return 0;
}
/* una sola cosa come : si implementano in questo caso il costruttore per
copia e l' operatore = per la lista?*/

 *MEGA-CUT*
std::list che problema ha?
Luc.

 Luc.
Credevo che la sua richiesta fosse più per motivi didattici.

 copia e l' operatore = per la lista?*/
tendenzialmente se impedisce l'utilizzo, anche implicito, ridichiarandole
private
spero di non aver commesso errori a mia volta.
L.
Newsgroup: it.comp.lang.c++
Titolo: STO DIVENTANDO PAZZO

Non so piu' cosa fare.
Ho deciso di imparare sto Visual C++ una volta per tutte, ma la mia
voglia d'imparare ha dovuto scontrarsi con un problema insormontabile:
non riesco a compilare.
Tutte le volte il compilatore bas**rdo mi dice:
LIBCD.lib(wwincrt0.obj) : error LNK2001: unresolved external symbol
_wWinMain@16
e io non so cosa fare!!!
Ho provato a mettere wWinMainCRTStartup nel campo Entry-point symbol
(come suggerisce la guida), ma il problema rimane!!
Non riesco a compilare neanche il programma nullo:
void main () {
}
Siete la mia ultima speranza!!! Vi prego!!!!!
Carlo

}
Questo, anzitutto, non e` un programma C++, e neppure
C; nessuno dei due linguaggi ammette che main sia void
(DEVE essere int).  Il "giusto" programma nullo e`:
        int main() {
            return 0;
        }
Se scrivi "void main", il tuo programma invoca "undefined
behaviour", quindi un compilatore aderente allo standard
puo` fare assolutamente quel che vuole (molti, ma non
tutti, scelgono, secondo me erroneamente, di accettare
simili non-programmi).
Comunque, il tuo problema non e` questo, bensi` le
indicazioni errate che stai dando a compilatore e linker
sul tipo di programma che intendi scrivere.
Con Visual C++ (a seconda della versione che hai, ma
spero sia ragionevolmente recente, 4.0 o meglio) di
solito indichi il tipo di programma quando generi il
nuovo progetto.  Per un programma "di console", e
tale deve essere uno che vuole iniziare a eseguire da
main(), devi generare il progetto come "Win32
Console Application"; a questo punto, puoi inserirvi
un nuovo sorgente, magari di main nullo (corretto,
please, anche se penso che ingoiera` anche quello
errato che dichiara di essere void), e riuscirai, non
solo a compilare (questo gia` ti riusciva), ma anche
a linkare (il che falliva).
Se preferisci compilare e linkare da linea di comandi,
makefile, ecc, la cosa fondamentale per avere una
applicazione di console e` passare al linker lo switch
"/subsystem:console" in un modo o nell'altro (ad
esempio, puo` farlo il compilatore, CL, se lo dici
dopo il suo switch /link; oppure puoi usare variabili
di ambiente, o altro ancora).  Comunque, a linea
comandi, se non passi al linker alcuna opzione di
tipo /subsystem, esso cerca di tirare a indovinare
sulla base dell'esistenza dei simboli main e/o
WinMain e/o wWinMain; se usi l'ambiente di sviluppo
integrato, il /subsystem viene normalmente passato
esplicitamente al linker (come, tutto sommato, e`
pur sempre piu` prudente fare), e  /subsystem:windows
indica esplicitamente che vuoi scrivere una applicazione
nativa Windows (puoi esaminare le opzioni dall'IDE
come Project/Settings, o Build/Settings in vecchie
versioni dell'IDE; questa e` visibile nel tab di Link).
Alex

_wWinMain@16

Newsgroup: it.comp.lang.c++
Titolo: Spiegazioni ulteriori

Tento di focalizzare meglio il problema: ho una lista template che deve
contenere gli oggetti che genero. Per ovvie ragioni, questa lista contiene
oggetti del tipo SuperClasse:
Lista <SuperClasse> l;
Quando inserisco un nuovo oggetto nella lista, la procedura è più o meno
così:
void inserisci (SuperClasse s)
{
 /* creazione del nodo n */
 n->contenuto = s;
 /* altre operazioni */
}
Il casino viene fuori nell'assegnazione, perché l'oggetto s (che alla
chiamata sarebbe di uno dei tipi SottoClasse) subisce un cast implicito
(credo) e diventa un oggetto SuperClasse (perché così  mantengo la
generalità sul tipo di oggetto)! Si può ovviare usando un'allocazione
dinamica degli oggetti e quindi modificando la lista perché memorizzi i
puntatori, anziché gli oggetti: in questo modo funziona. Così facendo, però,
devo ricordarmi di distruggere esplicitamente gli oggetti per liberare la
memoria! C'è la possibilità di ridefinire l'operatore = in maniera
"intelligente" (cioé che non perda le caratteristiche aggiuntive dei vari
tipi SottoClasse)? Secondo me non si può (si può fare il cast da SottoClasse
a SuperClasse, ma non viceversa), ma vorrei l'opinione di qualcuno più
esperto. Ciao e grazie
Marchisio Stefano

 esperto. Ciao e grazie
No, non si puo. Il problema e' che l'oggetto di arrivo del tuo
assegnamento e' comunque di tipo Base (A nel mio esempio) ed ovviamente
questo non possiede i membri delle sue sottoclassi.
L'alternativa e' quella di utilizzare un cosiddetto "smart pointer", che
si preoccupi di rimuovere l'oggetto quando nessuno lo punta piu'. Non e'
una cosa banalissima pero'. Se non sbaglio Scott Meyers presenta un
esempio in "More Effective C++".
Ciao,
Nicola

 tipi SottoClasse)?
E' assai pericoloso.  E se dovessi fare una *vera* assegnazione, ti
piacerebbe che succedesse ai tuoi oggettini qualcosa di insolito e
contro-intuitivo?
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Dept. of Physics, Univ. of Padova, Italy          loreti at pd dot infn dot it

 usa degli std::auto_ptr.
Mi accorgo che sono stato impreciso.  Containers di auto_ptr sono
esplicitamente vietati dallo standard; ma visto che lui usa una classe
'lista' non-standard _potrebbe_ evitare i problemi relativi.

Newsgroup: it.comp.lang.c++
Titolo: Guida agli Interrupt

Ciao a tutti.
Sapete dove posso reperire in Internet una guida agli interrupt almeno del
486, possibilmente in italiano?
Grazie!!!!!!
--
----------------------------------
Maverick
E-mail: 
iron...@tiscalinet.it
ICQ# 60186250

486, possibilmente in italiano?
La migliore (o unica ?) e' sicuramente la Ralf Brown che trovi al
sito:
http://www.cs.cmu.edu/afs/cs.cmu.edu/user/ralf/pub/WWW/files.html
Pero' e in inglese.
ciao
Newsgroup: it.comp.lang.c++
Titolo: Helpme. Questa classe non si compila ??

/*
Ho qui un quesito per qualche volenteroso che
sia disposto a darmi una risposta.
Ho creato una classe che qui mi limito a rappresentare nel suo nocciolo:
Durante la compilazione il compilatore BC3.1 mi da' il seguente errore
error xx: Cannot convert 'void(far interrupt ProvaClass::*)()' to
void (interrupt far *)(...)
Non capisco come riuscire a far digerire al compilatore sta' linea.
gra...@tin.it
*/
#include "stdio.h"
#include "dos.h"
class ProvaClass
{
	public:
	ProvaClass();
	void interrupt handler(void);
};
void interrupt ProvaClass::handler(void)
{
}
ProvaClass::ProvaClass()
{
	setvect(0x1c,&ProvaClass::handler);
}
main()
{
	ProvaClass Prova;
}

Non capisco come riuscire a far digerire al compilatore sta' linea.
mettendo una funzione che non sia membro di una classe.
Gianpaolo Bottin
- Live Long and Prosper -

Io non lavoro con il BC, ma suppongo che il prototipo della funzione  che tu
chiami  con :
    setvect(0x1c,&ProvaClass::handler);
sia qualcosa come, ad es., oldvec =  setvect(intno, newvec); dove newvec
è un void (interrupt far *)(...), cioè un puntatore far ad una funzione di
tipo 'interrupt' con numero variabile di argomenti [(...)], senza valore di
ritorno (void); ora, quello che invece tu gli stai passando è un puntatore
far a funzione di tipo 'interrupt', ok, void, ok, ma senza argomenti e
membro di classe ProvaClass, e qui nascono i problemi; non e' che il C++ sia
razzista o che il tuo compilatore abbia delle fisime, ma una funzione membro
di classe ProvaClass ha come primo argomento l'indirizzo dell'oggetto cui
appartiene, cioe' un'istanza di ProvaClass, che e' quello che tu usi, se lo
usi, all'interno della funzione con la keyword 'this'. Per farla breve, la
lista degli argomenti del prototipo e quella della funzione che tu vorresti
usare sono troppo differenti perche' il C++, con tutta la buona volonta',
possa ricondurle ad uno stesso tipo. Se tu hai bisogno che il tuo interrupt
handler sia un membro di ProvaClass, dovrai dichiararlo come 'static':
allora non avra' piu' il 'this' implicito come primo argomento, e vedrai che
il compilatore si rabbonira'. Il tuo handler pero' avra' accesso solo agli
eventuali altri membri static di ProvaClass: se vuoi che si comporti come
una funzione membro non static, dovrai progettare ProvaClass in modo che se
ne possa creare una sola istanza alla volta, ed il costruttore inizializzi
un membro static, chiamiamolo per esempio m_pThis, di tipo ProvaClass* con
il valore di this; allora, anche i membri static potranno accedere ad ogni
membro m_XXX, dato o funzione, dell'unica istanza presente della classe,
come m_pThis->m_XXX... So che suona un po' macchinoso, ma e' una possibile
soluzione del problema dell'installazione di funzioni membro come interrupt
handlers. Come forse avrai capito, e' un problema contro il quale ho
sbattuto le corna un po' di tempo fa, e questa e' la mia soluzione... Buon
lavoro.
Salvatore Uras (
sal...@tin.it
)