mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c++
Titolo: Librerie in C++

Ho scoperto leggendo che il C++ non ha compatibilità binaria, cioè non
c'è un formato comune ai vari compilatori per vtables, name mangling e
altre cosette "di basso livello" come queste, e che quindi se io compilo
una libreria in C++ con un dato compilatore su una data piattaforma la
lib non funzionerà con altri compilatori/piattaforme. E' vero? O_o
Ma questo è necessario o è solo frutto del caso, cioè c'è un motivo
preciso per cui non si può fare o... è solo che non si sono messi
d'accordo tutti quanti?

 lib non funzionerà con altri compilatori/piattaforme.
La situazione è anche peggio. Tra una versione e l'altra dello stesso 
compilatore sulla stessa piattaforma non c'è garanzia che il gioco 
funzioni.
Perché non si sono messi d'accordo non lo so, ma si sono messi 
d'accordo "poco" anche sul formato dei simboli di debug, altra cosa che 
sarebbe stata apprezzabile. Ovvero Microsoft usa solo i suo formati 
proprietari.
-- 
Articolo 33 della Costituzione italiana: L'arte e la scienza sono 
libere e libero ne è l'insegnamento.
Se siete tosti: 
http://www.rexresearch.com/kervran/kervran.htm

 preciso per cui non si può fare o...
Uno standard per l'ABI è ovviamente fattibilissimo.

 lib non funzionerà con altri compilatori/piattaforme. E' vero? O_o
Sì. A volte non c'è nemmeno compatibilità tra versioni diverse delle stesso
compilatore. Quelli del GCC hanno adottato un'ABI "vendor-neutral" con la
versione 3.2 e le successive versioni dovrebbero essere sempre compatibili.
Quelle precedenti usavano un'ABI completamente diversa.
Nota che quando si tratta di riutilizzare librerie compilate in ambienti
diversi la compatibilità binaria non riguarda soltanto le specifiche
dell'ABI adottata dai compilatori, ma anche l'implementazione della
Libreria Standard e il supporto runtime. Lo Standard descrive solo l'API a
livello astratto. Le dimensioni e la struttura interna dei tipi previsti
dallo Standard sono dettagli che variano da un'implementazione all'altra.
Max
Newsgroup: it.comp.lang.c++
Titolo: Conversione da hex a int

Salve!
Ho un problema che le mie scarse conoscenze di C non mi aiutano a risolvere. 
Sto scrivendo, per esercizio, un programma che converta una stringa inserita 
dall'utente usando le tabelle ASCII. Ho trovato nel libro di McGraw Hill un 
codice molto bello che permette di trasformare una stringa (nel mio caso un 
URL) in esadecimale con percentuali (che detto per inciso viene accettato 
dai browser, è quello il mio scopo):
***** inizio codice *****
[...]
char string[300] = ""; // inzializza la stringa
char *p1;
[...]
cout << "Inserire l'URL da tradurre: ";
gets(string);
[...]
p1 = string;
while (*p1) printf("%c%x", '%', *p1++);
***** fine codice *****
Esempio:
http://hwupgrade.it
 diventa
%68%74%74%70%3a%2f%2f%68%77%75%70%67%72%61%64%65%2e%69%74
Il programma funziona senza problemi; adesso però il mio problema è fare 
l'opposto! Dalla stringa
%68%74%74%70%3a%2f%2f%68%77%75%70%67%72%61%64%65%2e%69%74
ricavare 
http://hwupgrade.it
 e non so proprio come elaborare l'algoritmo! 
L'unica cosa che mi viene in mente è costruire un array bidimensionale 
(chiamiamolo ascii[128] [2]), e inizializzarlo con i valori esadecimali e 
decimale di ogni carattere ASCII per fare una specie di tabella di 
conversione. Dopodiché paragorane ogni singola cella di string con quello di 
ascii e avere la traduzione, ma mi pare una cosa molto grezza. C'è un altro 
sistema più pratico, magari utilizzando i puntatori come nel primo problema?
Spero di essermi spiegato chiaramente, e grazie in anticipo per l'aiuto.

Ho un problema che le mie scarse conoscenze di C non mi aiutano a risolvere. 
Scusate per il flood, ma ho avuto qualche prob con il server news.
Scusate ancora.
-- 
You know you're in trouble 
when there is nothing left on the altimeter 
but the maker's name

Newsgroup: it.comp.lang.c++
Titolo: Delete in SharedMemory

Domanda: Se apro una shared memory, vi alloco un oggetto chiamandoci il new,
posso poi fare il delete dell'oggetto come riportato sotto?
Altrimenti, come faccio ad invocare il distruttore?
/*pAux è u puntatore ad un'area shared*/
pOggetto = new(pAux) pOggetto;
delete pOggetto;
Ciao,
Andrea.

 delete pOggetto;
No, non devi chiamare delete, bensi esplicitamente il distruttore:
pOggetto->~Oggetto();
Ciao,
Nicola
Newsgroup: it.comp.lang.c++
Titolo: Una domandina su Borland Compiler free

Ahime' l'inglese non e' il mio forte.
Qualcuno puo' spiegarmi quale limitazione c'e' nella versione free del
compilatore Borland Builder Compiler c/c++ 5.
E' una versione limitata? In cosa?
Ha una scadenza?
Grazie

 wrote in message
news:9907ua$3rn2n$1...@ID-65884.news.dfncis.de...


Non ha limitazioni come compilatore C++. Rispetto al prodotto
commerciale da cui deriva, ovvero C++Builder, non ha l'ambiente di
sviluppo integrato ne le librerie RAD.
Ciao,
Nicola

 ha scritto nel messaggio
news:9907ua$3rn2n$1...@ID-65884.news.dfncis.de...



Perchè OT? 
Sto seguendo il ng, mi pare che si parli di c++ o cosi almeno
it.comp.lang.c++ lascia intendere.
Dobbiamo chiedere
it.comp.lang.c++.compiler.borland.free.question.in.cosa.è.limitato.il.compilatore?
(Scherzo, ma voglio capire di che si parla, perche mi sto avvicinando
alla programmazione di interfacce, dopo un periodo da programmatore di
classi mi voglio divertire anch'io)

Perchè me lo chiedi quando puoi trovare la risposta andando a leggere il
manifesto del ng (cosa che tutti dovrebbero fare prima di postare su un ng,
almeno secondo la netiquette)?
In poche parole su questo ng si parla di C++ Standard....e basta. Tutte le
altre domande riguardo implementazioni particolari (a meno che non
riguardino questioni sulla sintassi/semantica del C++ standard) vanno poste
su altri ng. Nel caso in particolare su it.comp.programmazione.win32;


 Sarà impegnato? ;-)
Si e' notata la mia assenza?
Si, sono incasinato. E sto "saltando" messaggi a iosa!
Comunque non sono io il piu' "radicale" nel discorso dell'OT. Anzi, in genere mi
limito a non rispondere ai messaggi OT. Solo se contengono qualche spunto che mi
interessa o se noto un tono da "flame" intervengo, e segnalo l'OT.
Raramente troverai da parte mia il semplice reply: sei OT, questo gruppo parla
di ..., posta su ...
Anche perche', di solito, ci pensa gia' RoboNicola :-)
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

 su altri ng. Nel caso in particolare su it.comp.programmazione.win32;
Ok, ci sto
Newsgroup: it.comp.lang.c++
Titolo: Esplorazione directory in Visual C++

Salve a tutti.
Mi potete indicare come è possibile in VC++ ottenere la lista dei files
presenti in una directory?
Non conosco VC++ ma devo necessariamente utilizzarlo e sto cercando di
arrabbattarmi un po'. E' davvero esteso e riuscire a trovare quello che
ti serve non tanto semplice.
Help! :-)
Grazie,
Saluti,
Marcello.

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 
forums.borland.com
 (in inglese)
Grazie,
Nicola Musatti
Newsgroup: it.comp.lang.c++
Titolo: COME AGGIORNARE GLI EDIT BOX?

Sto facendo un programmino sotto windows 3.1 ed ho un grosso problema.
Ho bisogno di aggiornare gli edit box di una finestra ogni qualvolta
passo da un edit box ad un altro (premendo TAB oppure cliccando con il
mouse su un altro edit box). Mi spiego meglio con un esempio:
ESEMPIO:
Mi trovo su un edit box, ci scrivo dentro e poi vado a scrivere dentro
un altro edit box. Quando mi posiziono sul secondo edit box ho bisogno
di aggiornare tutti gli edit box della finestra. Come faccio?
Grazie per l'aiuto.


//    get edit box window handlerHWND hWndEditBox = GetDlgItem( hWnd,
IDC_EDIT );
//    invalidate edit box entire area
InvalidateRect( hWndEditBox, NULL, TRUE );
//    force updating ( flush message queue )
UpdateWindow( hWndEditBox );

 ha scritto:

Ma io non ho bisogno di riaggiornare la finistra a livello di
visualizzazione.
Adesso mi spiego meglio:
Scrivo un numero dentro un EDIT BOX (ad esempio 10000), e poi premo
TAB per andare a scrivere dentro un altro EDIT BOX. Al momento in cui
premo TAB devo poter applicare una funzione sulla cifra inserita
(10000) che me la riscriva dentro l'EDIT BOX con il puntino ogni tre
cifre (es. 10.000). Per farlo mi servirebbe sapere qual'e' il
messaggio che windows invia quando cambio box. Dovrebbe essere del
tipo WM_XXXXX.
Ti ringrazio per l'interessamento.
PS: la procedura che mi gestice la finestra in esame e' la seguente.
Dove e come posso inserire il mio check?
BOOL CALLBACK DlgProcTabulati(HWND hdwnd, UINT message, WPARAM wParam,
LPARAM lParam)
   {
   char str[256];
   switch(message)
      {
      case WM_INITDIALOG:
      ShowSheet_Tabelle(hdwnd);
      sprintf(str, "Tabulati: %s", port[indice].nome_port);
      ModificaTitolo(hdwnd, str);
      break;
      case WM_CLOSE:
      StoreSheet_Tabelle(hdwnd);
      EndDialog(hdwnd, TRUE);
      return TRUE;
      }
   return FALSE;
   }

tipo WM_XXXXX.
Il messaggio e' l'EN_KILLFOCUS, e' un messaggio di notifica inviato al
parent dall'edit control che perde il focus. I messagi di notifica
vengono inviati con un messaggio di WM_COMMAND in win32 questi sono i
parametri:
idEditCtrl = (int) LOWORD(wParam); // identifier of edit control 
wNotifyCode = HIWORD(wParam);      // notification code 
hwndEditCtrl = (HWND) lParam;      // handle of edit control 
wNotifyCode= EN_KILLFOCUS
Gianpaolo Bottin
- Live Long and Prosper -

Newsgroup: it.comp.lang.c++
Titolo: ot ? vc6++ mfc

ho un paio di domande da fare a qualche esperto.
1 sul concetto di MFC (Microsoft Foundation Class)  cosa è? sono come
le classi degli oggetti in VB?
2 dal'ambiente vc6++ posso creare file  assembler e compilarli ?
3 esiste qualche buon sito che tratti la programmazione in VC?

ho un paio di domande da fare a qualche esperto.
Ciao ,qui sei OT, prova su it.comp.programmare.win32.
Il topic di it.comp.lang.c++ è il C++ e non sue particolari
implementazioni, librerie o sistemi operativi in particolare.
-- 
Marco Barisione (ICQ 84277092)
Newsgroup: it.comp.lang.c++
Titolo: Visual C++/GIS raster/TORINO

Programmate in C++ / Interessati al mondo GIS / Abitate a Torino
Siete interessati a creare appllicazioni (wizards) con ER_Mapper library.
ER_Mapper è un GIS raster del livello di ESRI. Ha un grosso mercato nel
settore. Vi metto a disposizione [1] tutta la documentazione di supporto,
[2] la mia esperienza per indirizzarvi sugli applicativi, [3] è inteso che
la proprietà intellettuale sarà vostra e sarete liberi di commercializzarli.
A me darete solo la possibilità di utilizzarli. Se interessati, possiamo
parlarne.

 ha scritto nel messaggio
news:zl5s6.44093$yl2.1...@news1.tin.it...


Newsgroup: it.comp.lang.c++
Titolo: Risorsa Testo

Salve a tutti, spero che qualcuno possa rispondere.
Un programma in c++Builder ha accesso in lettura/scrittura ad un file di
testo, ad esempio
.\risorse\Testo.txt
Vorrei includere questo file nell'eseguibile compilandolo come risorsa
interna. Ho letto da qualche parte la procedura per includere sequenze di
tipo bmp, ma per la verità non riesco a tradurre la procedura per i file di
testo.
Sarei veramente grato se qualcuno potesse darmi una mano, un suggerimento, o
indicarmi una scorciatoia.
Grazie mille anticipatamente!            Mario.

Forse ti conviene creare delle risorse di tipo Stringa con l'editor di
risorse.
Le risorse verranno linkate con l'eseguibile in fase di compilazione.
Inferno.

...


Newsgroup: it.comp.lang.c++
Titolo: Licenza LZW Unisys

Salve a tutto il NG,
anche solo per leggere un file TIF con compressione LZW e' necessario
acquistare la licenza dalla Unisys (o comunque farsi dare una
"liberatoria") ; prima di contattarli vorrei avere un idea di quanto
puo' costare tale licenza (se costa troppo lascio perdere). Grazie a
chiunque vorra' aiutarmi.
Alex.T

acquistare la licenza dalla Unisys (o comunque farsi dare una
Non so per i TIF, comunque so che per i GIF si paga alla Compuserve
(una trentina di dollari, se non erro) e una piccola percentuale va
alla Unisys (1 dollaro o giu' di li').
Newsgroup: it.comp.lang.c++
Titolo: Leggere e scrivere Bit

 file?
Certamente! E' sufficente scriverlsele.
L'hardware normalmente legge "a blocchi" di byte, ad esempio 512 alla volta,
ma il SO ti permette di leggere anche solo 1 byte tenendo un buffer interno.
Se fai la stesso cosa con una tua funzione, puoi avere un buffer di 1 byte e
leggere tramite essa 1 bit alla volta.
Se invece cercavi una funzione standard, temo di no, ma non conosco bene
tutte le funzioni, chissà...
--
Alessandro Monti

singoli bit da file?
Impossibile!!Al massimo puoi leggere un solo byte per volta,però
facendo l'AND logico fra il byte e delle opportune maschere puoi
ottenere il valore di ogni singolo bit.Ad esempio puoi creare una
funzione di questo tipo:
int TraduciByteinBit(int bitnum,int _byte)
{
int val=0;
int maschera[9]={0,1,2,4,8,16,32,64,128};
/*CONOSCENDO IL VAL.DEL BYTE,RICAVA IL VAL.DEL BIT*/
/*bitnum=numero del bit.*/
/*_byte=valore del dato.*/
if(bitnum>0 && bitnum<=8)
{
int _valprov=_byte & maschera[bitnum];
val=(_valprov / maschera[bitnum]);
}
return val;
}
Il Ghenio


Un po complicato... meglio:
unsigned int GetBit(unsigned char value, unsigned int bitindex)
{
  return (value>>bitindex) &0x1;
}
o, genericamente:
template<class T> unsigned int GetBit(T value, unsigned int bitindex)
{
  return (value>>bitindex) & 0x1;
}
Da istanziare solo su tipi integral (char, int, ...). Il controllo del
range di bitindex e' inutile se non si prevede un metodo per ritornare
l'errore (ritornare 0 e' ambiguo).
Saluti, A.

l'errore (ritornare 0 e' ambiguo).
Possibili soluzioni:
a) usare variabili di stato globali  (sinceramente non mi piace)
b) sollevare una eccezione (come avviene se non erro per la divisione
     per 0).
nel caso b) l'eccezione potrebbe essere sollevata per bitindex<0,
mentre per valori troppo grandi ritornare 0 potrebbe essere accettabile.
Paolo
-----------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
-----------------------------------------------
Newsgroup: it.comp.lang.c++
Titolo: Metodo di cramer

Chiedo se qualche buon'anima sappia dove posso recuperare le sorgenti di un
programmino che risolva dei sistemi attraverso il metodo di cramer, in
quanto devo implementarlo in un programma che sto gia facendo...
grazie a chi mi puņ aiutare
ciao!

 quanto devo implementarlo in un programma che sto gia facendo...
Ad es.
http://www.math.wustl.edu/~ben/ch12p2.c
Tieni presente che questo approccio ha pessime prestazioni per sistemi di
dimensione non minuscola, vedi la riassuntiva analisi a:
http://www.math.uic.edu/~hanson/mcs471/cramers.html
che si riassume in "non pensare neppure a usare la regola di Cramer per
n>4".
Alex (MVP di Brainbench per il C++)

 quanto devo implementarlo in un programma che sto gia facendo...
Lascia perdere il metodo di cramer. Ha complessità O(n!), in pratica
significa che più è grande la matrice più vecchio ti fai per avere la
soluzione. Prova a cercare Numerical Recipes in C su internet, è scaricabile
gratuitamente. C'è la spiegazione di come effettuare la gaussian elimination
con fattorizzazione LU, il metodo più veloce per la risoluzione di sistemi
lineari a matrice dei coefficienti piena.
Ciao,
Fulvio

 ciao!
Se ti interessa comunque il metodo di Cramer io ho scritto una funzione in C
(non commentata) che implementa il calcolo del determinante con la regola di
Laplace e una funzione che calcola l'inversa.
Fammi sapere e se vuoi te lo invio.
Antonio
ps come hanno fatto notare gli altri č un metodo *molto* pesante ma comunque
vedi tu
Newsgroup: it.comp.lang.c++
Titolo: [OT] Errore di compilazione.... prego... aiuto!!!

Mi scuso per l'OT, ma non so a chi chiedere, ho meglio, ho gia' chiesto nei 
news specifici ...
borland.public.cppbuilder.language.cpp
borland.public.cpp.borlandcpp
... ma ancora non ho avuto risposta.
Ho questo problema...
Devo convertire un progetto che ho sviluppato come progetto console con 
dev-c++, g++ 3.2, in un pogetto GUI con C++ Builder 6.0
ma non riesco a trovare una soluzione a questo problema
Ecco un esempio di codice...
 #include <string>
#include <algorithm>
#include <iostream>
 //------------------------------------------------------------------------- 
- -
 #pragma hdrstop
 //------------------------------------------------------------------------- 
- -
 #pragma argsused
 int main(int argc, char* argv[])
{
        std::string str = "io non so cosa fare";
        str.erase(std::remove(str.begin(), str.end(), ' '), str.end());
        std::cout << str << std::endl;
 system("pause");
        return 0;
}
//-------------------------------------------------------------------------- 
 -
 Funziona perfettamente (senza i #pragma)con GNU g++ e mi risponde:
iononsocosafare
Premere un tasto per continuare...
 ... ma non vuole proprio funzionare con Borland c++ Builder 5.0
 Il quale mi da i seguenti errori in compilazione:
 [C++ Error] Unit1.cpp(15): E2227 Extra parameter in call to 
std::remove(const char *)
[C++ Error] Unit1.cpp(15): E2285 Could not find a match for 
'_STL::string::erase(int,char *)'
 Please help me!
 grazie mille,
Checco

  ... ma non vuole proprio funzionare con Borland c++ Builder 5.0
Non mi intendo granche' di C++Builder, ma ho provato il tuo codice con 
VC++ e va bene...non e' che gli header STL di C++Builder5 hanno dei 
bug??
Potresti provare a scaricare degli aggiornamenti?
Ribadisco: il tuo codice sembra corretto!
Ciao,
Dan


Effettivamente sembra un bug od un problema della versione che ho io...
sostiturndo _STL::remove() al posto di std::remove() funziona tutto bene.
Per un qualche motivo std::revove() anziche la funzioni STL di <algorithm> 
va a pescare una funzione C, function int remove(char const*)
Grazie comunque,
Checco

Newsgroup: it.comp.lang.c++
Titolo: invokare una DLL function

Ciao,
ho un'applicazione e una DLL sviluppate in VC++ 5.0.
Dall'applicazione devo invocare una funzione della DLL scritta
in C. Il problema è ke la chiamata fallisce!!!!
Ecco il sorgente:
typedef  BOOL  (CALLBACK* DLLCall)(str_Record *p);
HINSTANCE hDLL = NULL;    // Handle della DLL
 DLLCall SignGenerate;
 LPCTSTR DLLName  = "nome.dll";
 LPCSTR lpProcName = "nome_funzione";
  // carico dll
  hDLL = LoadLibrary(DLLName);
  SignGenerate = (DLLCall)GetProcAddress(hDLL,lpProcName);
// invoko la funzione, ma fallisce!!!
SignGenerate(pRecord);
grazie!!!!
--
Tommaso Caldarola
dott. in Informatica
Tel. 
+390806352116
 (Office)
e-mail: 
caldaro...@olivettiricerca.it
Web Site:  
http://www.angelfire.com/sk/tommaso

  SignGenerate = (DLLCall)GetProcAddress(hDLL,lpProcName);
.... ma SignGenerate è != NULL ?
Newsgroup: it.comp.lang.c++
Titolo: Elevamento a potenza e radice quadrata

Come si fa l'elevamento a potenza e la radice quadrata in C++ ??? Ho visto
di tutto, ma non questi operatori. Sono funzioni matematiche implementate in
qualche libreria, sono funzioni internet al C o devo crearmele io ???
Ciao by Stefano from Italy
http://www.aspide.it/freeweb/imperial

In C c'e' la funzione pow().
Ciao.
Antonio Donatiello

 qualche libreria, sono funzioni internet al C o devo crearmele io ???
Per la radice quadrata c'e'  double sqrt(double x)  in math.h.
Per l'elevamento a potenza c'e'  double pow(double x,double y)   in math.h.
Se la base e' il numero di Nepero (e) usa  double exp(double x)  in math.h.

Per l'elevamento a potenza c'e'  double pow(double x,double y)   in math.h.
Ok, volevo solo sapere se erano funzioni implementate nelle specifiche del
C++ o se erano contenute in una delle librerie a corredo... sai... sto
imparando :-)


Newsgroup: it.comp.lang.c++
Titolo: #include

Salve a tutti,
ho appena terminato un programma in C++ di un certo volume, e per
semplificarne la realizzazione l'ho diviso su 4 file:
in uno ho dichiarato e definito una classe per gestire array dinamici e
sicuri;
in un altro ho dichiarato le classi presenti nel programma, nel terzo ho
definito le funzioni membro delle classi e nel quarto ho inserito la main().
I file sono tutti inseriti nel progetto, ma non riesco a includerli l'un
l'altro senza avere errori in fase di linking.
Qualcuno sa dirmi qualcosa?
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

magari dovresti essere più preciso... comunque, hai diviso i file in
header e cpp, vero?
hai messo gli #ifndef/#define/#endif negli header?
in realtà da come ne parli, dovresti avere:
- un file .h/.hpp per la classe degli array dinamici (non potevi usare
std::vector ??)
- un file con le dichiarazioni delle classi, quindi un header
- un file con l'implementazione delle classi, quindi un cpp
- un file con main()
dunque è sufficiente mettere nel file (cpp) del main l'header degli
array dinamici e l'header della dichiarazione delle classi
se le classi fanno uso di array dinamici, devi inseirire gli include
degli header degli array dinamici nel secondo e/o nel terzo file
-- 
]\/[ad]\/[age (
www.mindreamz.net
)
"Un Maestro insegue semplicemente la sua visione di Eccellenza in
qualunque cosa sta facendo e lascia agli altri decidere se sta 
lavorando o giocando. A lui sembra sempre di fare entrambe." - Anonimo


Probabilmente hai dei problemi con le inclusioni multiple dei vari .h
All'inizio di ogni .h metti una cosa del tipo
#ifndef NOMEFILEH_INCLUSO
#define NOMEFILEH_INCLUSO
.........
qui metti tutto il codice del .h
.....
#endif
dove:
NOMEFILEH_INCLUSO = un nome che sia univoco per ogni file .h
Newsgroup: it.comp.lang.c++
Titolo: typedef con un array

Ho un problema che non riesco a risolvere, ma
che temo sia abbastanza stupido.
Vorrei fare in modo di creare un mio nuovo tipo,
che deve consistere in un array di 10 interi.
Qualcosa tipo:
typedef int[10] ID;
Il problema č che cosě non funziona, come faccio?
Grazie mille.
Livio

 typedef int[10] ID;
        typedef int ID[10];
funge?
Ciao.
-- 
---
*************** | Have you ever retired a human by mystake?
*** Azathot *** |
*************** | To contact me, ask me gently. Thanks.

Risolto con typedef int ID[10].

 funge?
Perfetto ;)

Newsgroup: it.comp.lang.c++
Titolo: Borland c++ builder....

Ciao! Premetto che non so niente di c++, ma vorrei sapere 2 cose:
Come si accede al registro di configurazione di windows(lettura, salvataggio
impostazioni) e poi..... come si aggiunge, rimuove una voce a una listbox??
Accetto anche progetti con spiegazioni!
Io uso il borland c++ builder, quello ad oggetti!
Grazie mille a chi mi risponde!
Ciao

impostazioni) e poi..... come si aggiunge, rimuove una voce a una listbox??
Lo stesso vale per ListBox, per rimuovere una voce in particolare penso che
bisogni riscrivere la lista saltando l'elemento da cancellare, ma non sono
sicuro. ListBox1->Items->Strings[i]


io ho guardato sulla guida ma non c'č niente!!!
:-(((

Accetto anche progetti con spiegazioni!


e poi..... come si aggiunge, rimuove una voce a una listbox??
Guarda AddItem
CIao!
-=PJ=-

Newsgroup: it.comp.lang.c++
Titolo: Programmazione con DirectDraw

Ho provato a linkare gli esempi di direct draw con visual c++ 5 ma mi dà il
seguente errore:
error LNK2001 : unresolved external simbol
Io dopo aver inserito gli header .H della libreria nella cartella Include, i
file .LIB nella cartella Lib e aver controllato i DLL nella cartella system
NON SO PIU' CHE COSA FARE.
qualcuno mi aiuti
Demiurgo.

...



Vai in Project->Settings->Link, catergoria "General" e aggiungi "dxguid.lib"
e "ddraw.lib" all'elenco di librerie.
Ciao
Andrea
Newsgroup: it.comp.lang.c++
Titolo: Chiarimenti

Appurato che mi avete tutti detto di fare il programma con una ricorsione
(almeno gran parte) adesso sorge il problema vero e proprio.
Considerando che non so come si manipola un tipo di dato string ... mi
potete dire e far capire come si fa a tenere bloccata una lettera e poi
scambiare di posto le lettere rimanenti? Es.
parola: Roma
R la tengo fissa e poi con che comando o con che frammento di codice faccio
scrivere al programma:
Rmao
Raom
Ramo
Roam
E fatto questo come faccio a bloccare la seconda lettera cioè fare
Orma
ecc.
ecc.
Io penso che si faccia come un vettore cioè con un ciclo
for (int i=o; i<dimensione_stringa i++)
{
   // ma qui che comando ci metto????
}
Ciao e grazie

 Ciao e grazie
ciao,
asast
Newsgroup: it.comp.lang.c++
Titolo: problemi di esecuzione

ho creato la mia libreria statica liball-knn.a ed ho il mio file 
contenente il main che is chiama TryColl.cpp che richima funzioni nella 
libreria...
mi chiedo come faccio ad eseguire il file specificando la libreria??
(mi servirebbe la sintassi)
l'ambiente e' quello di linux ed utilizzo il gcc.
M.G.

...

Devi specificare al linker che puo' trovare le tue funzioni nella
libreria. Leggi il manuale del tuo ambiente o chiedi su un newsgroup
specifico.
Ciao,
Nicola

Newsgroup: it.comp.lang.c++
Titolo: aiuto cos'e' il c0s.obj???

Quando tento di far partire un mio programma con il c++ 4.5 o il c 1.0 , e
il programma e' corretto, perche' e' del mio profe, mi dice errore fatale
nel linker, unable to open file c0s.obj.
cosa vuol dire?
Cosa devo fare?
vi prego,aiutatemi!
Fa

...

Non ho capito a che compilatore stai riferendoti...
Comunque quelli sono i files oggetto presenti nella directory \lib che
contengono il codice (credo quello d'avvio) per ogni modello di memoria.
Infatti la lettera 's' in c0s.obj sta per 'small'. Dovrebbero essere
presenti anche c0c.obj, c0h.obj, c0l.obj, c0m.obj, c0t.obj (modelli compact,
huge, large, medium e tiny) per permettere al linker di produrre
l'eseguibile. Se non li trovi sono "uccelli per diabetici"...
Ciao, Giuseppe

c0s.obj è il modulo di startup del compilatore C Borland.
Una sorta di runtime che effettua le inizializzazioni necessarie alle
librerie di funzioni di run time utilizzate dal linguaggio C.
E così ti spiegato il 'c0'
's' perchè il programma è stato compilato per il modello di memoria Small.
Il problema potrebbe essere dovuto al fatto che all'atto dell'installazione,
dove è possibile scegliere i modelli di memoria da installare, non è stato
scelto il modello Small.
Per risolvere il problema devi recuperare il file c0s.obj dai dischi di
installazione, copiarlo nella directory $(BC)\lib e re-linkare il programma.
Stefano
Newsgroup: it.comp.lang.c++
Titolo: I/O su porte seriali e parallele ??

Ciao a tutti,
Qualcuno sa dirmi come posso fare I/O sulle porte seriali e parallele del PC
in C++ (MS Windows)
Grazie
Ciao
Claudio

 in C++ (MS Windows)
La questione è altamente OT cmq...
http://www.specosoft.com/zlportio.html
Ciao ZioPino

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

 wrote in message
93a1i9...@pino.metalux.org...


Newsgroup: it.comp.lang.c++
Titolo: leggere da un file spazi bianchi

Come faccio a leggere da un file gli spazi bianchi?
Esempio in un file ho
P
I
P
P
Come faccio a memorizzare in una stringa PIP P?
--
Carmine
ICQ# 146440250

 ha scritto nel messaggio
news:TpIl8.5111$S52.1...@news2.tin.it...


scusa mi sono spiegato un po male devi disattivare il flag ios::skipws
se tu hai
ifstream file ("prova.txt",ios::in)
fai
file.unsetf(ios::skipws);

Newsgroup: it.comp.lang.c++
Titolo: Xor di un buffer con una key

Ho realizzato una funzione che mi genera delle password in maniera
random, il mio problema e questo ho un LPCVOID buffer che voglio
criptare con la mia password. Ora supposto che la mia chiave si trova
in un char *pw. come faccio a fare la XOR con il contenuto del buffer?

lionking81 ha scritto:

non hai espresso un obiettivo univoco, in quanto hai due oggetti 
aggretati (ciascuno fatto di più parti elementari, per le quali 
ha senso definire in modo univoco l'operazione di XOR, bitwise), 
ma non hai detto come integrare l'interazione tra i due insiemi 
di "pezzi" (byte), che è del tipo molti-a-molti.
Il modo più semplice potrebbe essere far scorrere, in modo 
sincrono e a step unitario (ma anche con step diversi dall'unità 
per la password, in modo da pescare in modo circolare byte non 
consecutivi), un contatore sequenziale ai caratteri del buffer 
ed un secondo contatore circolare (che usa ad es.
J = ++J % buffsize .... occhio che è una espressione dal 
comportamento indefinito, traducila in modo pulito), in modo da 
usare i byte della password uno alla volta.
Ripeto, ci sono infinite varianti per fondere insieme i due 
insiemi di informazioni. Decidi meglio prima cosa vuoi fare di 
preciso.
Ah, ovviamente anche per la selezione dei bytes del buffer da 
criptare non sei obbligato a un puntatore che scorra linearmente 
ogni singolo byte contiguo, puoi pensare a varie serie di 
puntatori saltellanti ... dipende dalla tua fantasia.
ciao
Soviet_Mario

Grazie tutto ok.
Newsgroup: it.comp.lang.c++
Titolo: Initializing vector reference member

I was having some trouble that I have now "solved" but not in a good
way, I'm really confused as to why and how this works.
Here is a mock-up of the problem:
myclass.h
class MyClass
{
  private:
   int mydata_;
  public:
   MyClass(int mydata):mydata_(mydata){};
};
anotherclass.h
class AnotherClass
{
  private:
   vector<MyClass>& mydata_;
  public:
  AnotherClass(vector<MyClass>& mydata);
};
anotherclass.cpp
AnotherClass::AnotherClass(vector<MyClass>& mydata):mydata_(mydata){};
When I compile I get the following  error: no matching function for
call to ‘MyClass::MyClass()’
I see no reason for a reference to a vector to need to call the default
(compiler generated) constructor
of the containing object. I can not have a default constructor of
"MyClass" because it actually needs all the data it is being given. I
don't want to have a copy of the vector either, all I want is to have
a local reference to this list of "MyClass" objects. Why is it calling
the default constructor of the contained object for a reference?
My "solution", which for unexplained reasons works is to make the
reference a const reference:
myclass.h
class MyClass
{
  private:
   int mydata_;
  public:
   MyClass(int mydata):mydata_(mydata){};
};
anotherclass.h
class AnotherClass
{
  private:
   const vector<MyClass>& mydata_;
  public:
   AnotherClass(const vector<MyClass>& mydata);
};
anotherclass.cpp
AnotherClass::AnotherClass(const vector<MyClass>& mydata):mydata_
(mydata){};
Why does making the reference const avoid my problem, and is their a
more elegant(non const!) way of doing this?
 Thanks!

 the default constructor of the contained object for a reference?
I don't know exactly why this happens, but it makes sense. If you have a 
non-const reference to a vector, then you could resize the vector and 
this operation requires the default constructor. Maybe the vector<> 
template has implemented this behaviour on purpose...
E.
Newsgroup: it.comp.lang.c++
Titolo: [C++ Builder] Creazione oggetti...

Salve sto studiano il c++ grazie al C-Builder
Volevo sapere dove posso trovare esempio dell'utilizzo e creazione di
oggetti in CPP (non visuali) Con metodi e proprieta'.
Grazie
Kirys
--------------------------------------------------
Brayan Fix Kirys Solfory
E-Mail: 
Ki...@technologist.com
 
For Free Software go to: 
http://Kiryssoft.cjb.net

 wrote in message
nqgios0sq3dui493k...@4ax.com...

Newsgroup: it.comp.lang.c++
Titolo: Aiuto problema con gli iterator!!

Qualcuno saprebbe dirmi perchè da errore questo costrutto...e sapete un modo
per ovviare a tale errore...il compilatore mi dice che non può fare una
conversione da iterator a *float...di seguito il codice
bool funzione_controllo::a(vector<float>& indirizzi_di_float)
{
  real  *d=(real *)indirizzi_di_float.begin();
grazie a chiunque mi dia una mano
ciao Fede

   real  *d=(real *)indirizzi_di_float.begin();
L'errore e' esattamente quello che il compilatore ti ha dato. Se guardi 
il tipo di ritorno di begin(), vedrai che e' un iterator, mentre tu lo 
vuoi convertire in un float* (assumento che 'real' sia un typedef a 
float...). Un iteratore *non* e' un puntatore agli elementi contenuti, 
anche se degli overload degli operatori possono consentire sintassi simili.
Per ottenere il primo elemento del vector, puoi fare 
*indirizzi_di_float.begin(). Non puoi avere un puntatore all'elemento 
contenuto (se non erro) perche' viene effettuata copia per ogni 
operazione. Ergo, il modo per risolvere il problema dipende da quel che 
vuoi fare.
-- 
/**
  * 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
  */

   real  *d=(real *)indirizzi_di_float.begin();
Che cos'è 'real'? Un typedef per 'float'?
Con alcune implementazioni l'iterator di vector<T> è un T*, con altre è una 
classe apposita.
In generale, da un iterator di un vector<T> puoi ricavare un puntatore 
all'elemento dereferenziando e applicando l'operatore '&'. Nel tuo caso:
   float* elem_ptr = &(*indirizzi_di_float.begin());
Max



Grazie Mille a tutti e due ho capito bene il problema e ho risolto
				saluti Federico
p.s.
Il real ...chiaramente è un typedef a float
grazie ancora  !

Newsgroup: it.comp.lang.c++
Titolo: Umile domanda di un principiante

Salve! Lavoro su windows xp e il programmino si chiude all'istante, devo
aggiungere sicuramente un istruzione per bloccare la finestra. Ma quale?
Grazie infinite.
// Text-printing program.
#include <iostream> // allows program to output data to the screen
// function main begins program execution
int main()
{
   std::cout << "Welcome to C++!\n"; // display message
   return 0; // indicate that program ended successfully
} // end function main
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 aggiungere sicuramente un istruzione per bloccare la finestra. Ma quale?
Aggiungi:
system("PAUSE");
laddove vuoi "bloccare la finestra".
Comunque è una domanda molto comune per cui ti consiglio di vedere
altri messaggi sul tema.
Ciao

 Grazie infinite.
a) lancialo dalla shell, in modo che il programmi termini, ma la shell non
si chiuda
b) aggiungi qualcosa che aspetti un input, tipo un 
     char a;
     cin >> a;
   o qualcosa ti più intelligente tipo un get...
Newsgroup: it.comp.lang.c++
Titolo: simone basta dire che non ne sai niente

ciao se non lo sai, non fa niente l'ignoranza e un bene 

 ciao se non lo sai, non fa niente l'ignoranza e un bene 
Viva la maleducazione!
Ma la mamma non ti ha insegnato la netiquette ed il rispetto dei 
manifesti di newsgroup?
CI FAI o CI SEI?
Newsgroup: it.comp.lang.c++
Titolo: Help: Visual C++ e Matrici... miii!!!

 void MatrixOut (int righe,int colonne,int a[][]);
Non e' corretta la dichiarazione/definizione di una funzione come la fai tu.
Quando hai come parametro una matrice devi dichiararne le dimensioni; Al 
limite puoi omettere il primo indice; per cui:
void MatrixIn (int righe,int colonne,int a[4][5]);
oppure al limite
void MatrixIn (int righe,int colonne,int a[][5]);

Grazie, nel frattempo ero giunto alla medesima conclusione.. ma comunque
grazie, se non altro per il pensiero!!! :-)))
"Goffredo Baroncelli" <gh...@therra.bhome> ha scritto nel messaggio
news:ku8h79...@127.0.0.1...


Newsgroup: it.comp.lang.c++
Titolo: mi sento cretino

questo programma dovrebbe riemprire un file di 1 ma mi crea semplicemnte un
file vuoto... perche?!?! non capisco, quando entra nel ciclo for non scrive
niente nel file!
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
  ofstream file("mappa.txt",ios::out);
  for (int k=0;k++;k<64)
  file<<1<<endl;
    return 0;
}

   for (int k=0;k++;k<64)
   for( int k=0; k<64; k++ )

ok sono davveroc retino allor a:)
ehehe cmq grazie mille

 ehehe cmq grazie mille
perche' ti chiami "guru", allora?
maieutica, maieutica :-)
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Dept. of Physics, Univ. of Padova, Italy          loreti at pd dot infn dot it

Newsgroup: it.comp.lang.c++
Titolo: Header precompilati

Cosa sapete dirmi su questo argomento che sia standard?
-- 
Tnk
Luca "Kleidemos" Francesca
Un computer a un altro quando si incontrano:
"Ciao, come ti boota oggi???"

 Cosa sapete dirmi su questo argomento che sia standard?
Niente ;-)
Ciao,
Nicola

Newsgroup: it.comp.lang.c++
Titolo: vector di oggetti ofstream

č possibile creare un array di oggetti ofstream?
ho provato con
vector<ofstream> fout;
ma se faccio:
fout.resize(5);
mi escono fuori un sacco di errori in compilazione, non capisco xchč..
Ho dovuto ripiegare su un array "di basso livello":
ofstream fout[5];
(gcc 2.95.2)
-- 
Davide Cavallari


Ciò è dovuto al fatto che il costruttore di copia e l'operatore di assegnamento
sono privati.
In particolari sono definiti privati in basic_ios (anche se nell'ultimo draft
dello standard
non è indicato).
Saluti,  Manlio Perillo
Newsgroup: it.comp.lang.c++
Titolo: è possibile

Qualcuno sa come leggere ogni singolo Byte di un Floppy
o HD e in quale linguaggio

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: Re: array costanti in una classe

 Grazie, ciao.
Che io sappia, solo fuori

Se ho un array costante membro di una classe, č possibile 


Newsgroup: it.comp.lang.c++
Titolo: Newsgroup sbagliato???

Non capisco bene il topic allora...
l'ultima volta ho lasciato una domanda sulle critical section e mi e' stato
chiesto gentilmente di rispettare il topic. Ok che si tratta di elementi
caratteristici di win32 ma non e' forse un tema interessante in c++ quello
del multithread??? Se non lo e' allora temo di non capire del tutto questo
NG. Scusate.
Max

Leggi 
http://beatles.cselt.it/news-it/manif/it.comp.lang.c++.txt
Ciao,
Nicola

Newsgroup: it.comp.lang.c++
Titolo: tipi di variabile

Salve,
         stavo leggendo in rete un p� di codice c++ per inparare e mi sono
imbattuto in dword e cstring...volevo sapere qual'� rispettiva differenza
tra questi due definitori di tipi e magari int e char.
grazie

 tra questi due definitori di tipi e magari int e char.
DWORD e CString sono definiti dalle MFC di Microsoft, non sono standard C++
DWORD ï¿œ un #define unsigned long DWORD //(32 bit).
CString ï¿œ un oggetto per la gestione di stringhe di caratteri.
-- 
Dr. Atlantis

 Dr. Atlantis
Come nota a margine, se desideri che il tuo codice sia portabile, non
usarli. Impiega piuttosto i tipi definiti in stdint.h, che sono molto
più diffusi.
Ciao,
Matteo
Newsgroup: it.comp.lang.c++
Titolo: Bitset

La semplicita' d'uso e la praticita' della classe bitset e' innegabile.
Pero' se dovessi avere bisogno, per una qualsiasi ragione, di sommare due
valori binari definiti come oggetti bitset (ad esempio bitvec1 0100 e
bitvec2 0111) come posso fare? C'e' una maniera piu' semplice rispetto al
convertire gli oggetti in interi, sommarli e riconvertirli in binario? In
altre parole esiste un operatore somma per oggetti bitset (l'operatore +,
almeno in VC++
non funziona e presumo che non sia definito, dato il messaggio di errore che
ricevo).
Stefano

 errore che ricevo).
No, e non vedo perche' dovrebbe: le maschere di bit non si sommano, al 
massimo se ne fa l'or.
pero' dato che esiste la f. 
unsigned long bitset::to_ulong()
non dovrebbe essere difficile implementarlo... 
Resto pero' dell'idea che se ti serve un long, usa un long, non una 
maschera di bit... per i confronti, puoi sempre usare l'and.

 wrote in message
news:96ghd4$drv$1...@serv1.albacom.net...

Non esistono i concetti di "somma", "sottrazione", "moltiplicazione",
"divisione", "potenza", "radice" etc. etc. in booleano. Esistono i concetti di
"OR", "AND" e "XOR" fra due booleani, il concetto di "NOT" di un booleano e i
concetti di "BITWISE SHIFT" sia destro che sinistro fra sequenze di booleani.
Tutti implementati nel bitset.
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556


Si, conosco bene i concetti di somma or, and, xor, shift etc. Solo che
queste operazioni sono bit-a-bit. Io quello che volevo sapere e' se esiste
la possibilita' di fare una somma binaria con due oggetti bitset (1010 or
0010 da 1010, mentre una somma binaria deve dare 1100). Non e' una mia
necessita' ma solo una domanda "didattica" per sapere se ne esiste la
possibilita'.
Ciao
Stefano

 > maschera di bit... per i confronti, puoi sempre usare l'and.
Idea su cui concordo.




No! Puoi fare al massimo l'OR binario che é tutta un'altra cosa. Non
vedo comunque dove stia la difficolta nel convertire in intero lungo,
fare la somma e poi riconvertire il risultato.
Il Ghenio
-----
James: Adesso so finalmente cosa provano i panni messi in lavatrice!
Jesse: Avremo bisogno di un candeggio!!
(Team Rocket)
-----
Newsgroup: it.comp.lang.c++
Titolo: numero variabile di variabili

Oggi è la sera dei domandoni...
E' possibile istruire il programma a creare tot variabili a seconda dei dati
che deve gestire?
Mi spiego meglio: se, per esempio, viene inserito il numero 5 in input,
esiste un modo tramite il quale il programma creerà 5 variabili chiamate
var1, var2, var3, var4, var5 ?
L'esempio è un po' stupido e forse non rende l'idea, ma penso che se fosse
possibile creare un simile algoritmo in C o C++ sarebbe un notevole
vantaggio per la gestione di un numero non definito di dati (oltre che un
problema per l'allocazione della memoria, immagino).
Chi ne sa qualcosa si faccia sentire, io attenderò trepidante :)
Grazie
Dimenticavo: io uso il Visual C++ 5.0, se può essere utile saperlo...
--
San Vegeta from Hell
http://www.geocities.com/Area51/Dungeon/8436
http://come.to/Fantasy.it

 wrote:
La soluzione si chiama "allocazione dinamica".
Sostanzialmente devi utilizzare gli operatori new e delete abbinandoli
a strutture dati che possono crescere e decrescere dinamicamente (es.
liste linkate).
La libreria standard contiene gia` strutture con tali caratteristiche, con
le necessarie funzioni per inserire, recuperare e rimuovere valori,
senza alcun prefissato limite massimo.
Paolo
----------------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
  e-mail: 
mar...@cli.di.unipi.it
 
----------------------------------------------------------

Dimenticavo: io uso il Visual C++ 5.0, se può essere utile saperlo...
new funziona con VC++5, ma anche con qualsiasi altro compilatore C++.
In VC++5, o altro compilatore C++ aggiornato, puo` essere piu` comodo
usare:
    #include <vector>
    cin>>quante;
    std::vector<int> var(quante);
Oltre a usare var[0], ecc, qui puoi anche _far crescere_ dinamicamente
var (se ti accorgi che ti serve una altra variabile di valore iniziale 23,
basta tu faccia var.push_back(23);...), cancellare elementi, ecc ecc.
Alex
Newsgroup: it.comp.lang.c++
Titolo: costruttore della classe base

Ho un problemino :/
ho scritto la mia bella gerarchia di classi, ognuna con il suo bel 
costuttore...
forse mi sono confuso con il java... in c++ la keyword super non c'è 
vero? ;)
Per farla breve, devo chiamare da una classe derivata il costruttore 
della base.
Per ora ho creato dei motodi di init che fanno da "ponte", ovvero la 
base chiama init nel suo costruttore e la derivata chiama init ed 
aggiunge altre operazioni nel suo...
non mi sembra una soluzione pulita!
Altre idee?
Diego


ehm... naturalmente non intendo chiamare il default constructor ma uno 
parametrico... dimenticanza ;)

Diego Chiodini ha scritto:

Si deve usare la lista di inizializzazione, che funziona pure per i
campi costanti di un'oggetto (in effetti, per TUTTI i membri propri di
un oggetto).
Per esempio :
class B {
public:
	B( int i );
};
class C {
public:
	C( double i );
};
class D : public B, public C {
	const std::string pippo;
public:
	D( int i, int j );
};
D::D( int i, int j )
  : B(j), C(i), pippo("ciao") {
	// resto del corpo del costruttore
}
eccetera eccetera.
-- 
Matteo Settenvini
FSF Associated Member
Email : 
mat...@member.fsf.org
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d--(-) s+:- a-- C++ UL+++
P?>++ L+++>$ E+>+++ W+++ N++ o?
w--- O- M++ PS++ PE- Y+>++
PGP+++ t+ 5 X- R tv-- b+++ DI+
D++ G++ e h+ r-- y?
------END GEEK CODE BLOCK------

Diego Chiodini ha scritto:

Si deve usare la lista di inizializzazione, che funziona pure per i

Newsgroup: it.comp.lang.c++
Titolo: friend e template

Salve, sono alle prime armi con il c++, e ho avuto un errore in compilazione
che non capisco bene.
Allora, volevo fare una classe stack, ridefinendo l'operatore << perche' in
qualche modo mi stampasse il contenuto dello stack. L'unico modo
(correggetemi se sbaglio), e usare un metodo friend, tipo:
namespace STACK{
const int MAXDIM=100;
template <class ITEM>
class stack{
    ...
    public:
        ...
        friend ostream & operator<<(ostream &, const stack <ITEM> &);
};
...
template <class ITEM>
ostream & operator<<(ostream & out, const stack <ITEM> & s){
    s.display(out);    //display e' un metodo pubblico del mio stack
}
}
Il compilatore (dev cpp 4) mi da i seguenti:
warning:   friend declaration `class ostream & STACK::operator <<(ostream &,
const STACK::stack<ITEM> &)'
warning:   declares a non-template function
warning:   (if this is not what you intended, make sure
warning:   the function template has already been declared,
warning:   and add <> after the function name here)
warning:   -Wno-non-template-friend disables this warning.
...\ccw1baaa.o(.text+0x219):stack2.cpp: undefined reference to
`operator<<(ostream &, STACK::stack<float> const &)'
non capisco... tutti i warning (che poi tanto warning non sono, dato che se
uso l'operatore mi da' undefined reference) sono localizzati nella
dichiarazione della funzione all'interno di class stack. L'implementazione
e' come se non ci fosse, infatti il dev produce lo stesso output se la
tolgo.
Cosa sbaglio?
Grazie in anticipo,
Zeppe

 produce lo stesso output se la tolgo.
Come ho detto, l'implementazione di quella funzione NON c'è. Quindi, o
togli tout-court la dichiarazione 'friend' (che tanto non serve), oppure
la modifichi in modo che si riferisca alla funzione template (come è
spiegato nel testo del warning).
Max

 spiegato nel testo del warning).
Se non sbaglio (nel qual caso vi prego di dirmelo), nel secondo caso
basterebbe definire la funzione inline, implementandola all'interno della
classe.
Ciao,
Cecco

 I warning riguardano la compilazione. L'errore riguarda il linking.
Ehm... e' vero!
Grazie ancora!
Zeppe