Newsgroup: it.comp.programmare.win32
Titolo: Errore con std::vector

Compilando con CodeGear il seguente frammento:
std::vector <char*> TSTrow[TESTnum];
...
char *tmp=new char[32]; sprintf(tmp, ...);
TSTrow[(int)lpParam].push_back(tmp);
ottengo il seguente errore:
"E2316 'push_back' is not a member of 'std::vector<char 
*,std::allocator<char *> >'".
Funziona invece tutto bene con Visual C++ 2005 Express Edition.
Come mai ottengo quell'errore?
Grazie
Cristiano 

 *,std::allocator<char *> >'".
Puoi postare un esempio *compilabile* per riprodurre il 
comportamento?
-- 
Stefano Frosio
www.esse-effe.com

*,std::allocator<char *> >'".
Hai incluso "vector"?

 comportamento?
Questo:
#include <vector>
#include <stdio.h>
 std::vector <char*> vec[3];
 char *tmp=new char[32];
 sprintf(tmp,"%d",time(0));
 vec[1].push_back(tmp);
 Caption=AnsiString(vec[1][0]);
riproduce lo stesso comportamento, ma "purtroppo" viene correttamente 
compilato (non ho perso tempo a mettere un delete[] per tmp).
Bisognerebbe "decifrare" quello strano messaggio d'errore.
Cristiano 


Sě.
Cristiano 

 Funziona invece tutto bene con Visual C++ 2005 Express Edition.
sicuro?
ciao,
Marco

 TSTrow.push_back (tmp);
No, perché TSTrow è un array di std::vector<char*>, quindi l'elemento
i-esimo è un vector. La seconda scrittura non è corretta.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 i-esimo è un vector. La seconda scrittura non è corretta.
ops, sorry!
ha ragione Andrea

 Bisognerebbe "decifrare" quello strano messaggio d'errore.
Vediamo il codice che causa quell'errore, poi proveremo a 
decifrarlo.
-- 
Stefano Frosio
www.esse-effe.com

 possibilmente solo quello. [...]
La faccenda è complicata, perché dovrei postare una ventina di moduli... Non 
saprei come fare.
Cristiano 

 moduli... Non saprei come fare.
No, beh, allora con buona approssimazione possiamo dire che il 
problema è da qualche altra parte, cioè non sulla riga della 
push_back. Mi sembra strano però che hai compilato lo *stesso* 
codice sia con BCB che con VC++ ed hai ottenuto quell'errore 
solo sul primo... non è che con il secondo hai solo estratto una 
parte?
-- 
Stefano Frosio
www.esse-effe.com


Sì, è così, ma VC++2005 compila regolarmente anche la parte estratta (senza 
alcun collegamento o riferimento al codice completo), mentre BCB no.
Mi sembra proprio una stranezza.
Cristiano 

 completo), mentre BCB no.
Per la cronaca, con BCB5 la parte estratta si compila senza 
errori.
-- 
Stefano Frosio
www.esse-effe.com

 errori.
Con "parte estratta" intendevo quella da cui ottengo l'errore che ho 
postato.
Cristiano 

postato.
Ti è possibile costruire del codice (che non sia quello spezzoncino
già postato che compila) il più possibile simile all'operazione che
compi e che non venga compilato?


Forse non ho capito io, ma con quel pezzo di codice, il primo 
che hai postato per intenderci, ottengo quattro errori di 
compilazione, ma non quello che hai riportato tu. Per quello 
chiedevo un pezzo di codice che desse solo l'errore da te 
riportato, altrimenti verificare non č possibile e posso solo 
dire che io ottengo un risultato diverso (e cioč che la riga con 
la push_back si compila tranquillamente, come del resto hai 
detto anche tu e proprio per quello penso che il vero errore sia 
da qualche altra parte).
-- 
Stefano Frosio
www.esse-effe.com


Ho ridotto al minimo (o quasi) il programma e ho uploadato uno zip:
http://www.webalice.it/cristiano.pi/RaBiGeTe_DOS.zip
BCB mi dà l'errore di cui parlavo, VC++ no.
Speriamo di trovare la soluzione ! :-)
Cristiano 

 BCB mi dà l'errore di cui parlavo, VC++ no.
gcc (Dev C++ quindi mingw) solleva 6 warning ma compila correttamente.
Visual C++ (VS 2005) solleva 127 warning ma compila correttamente.
Volevo testarlo anche Turbo C++ della suite Turbo Explorer (è praticamente
lo stesso compilatore che usi tu), ma il va in errore durante il
caricamento di molti bpl iniziali. I soliti buchi Borland. Ci riproverò
appena possibile.


 Ci riproverò appena possibile.
Grazie.
Cristiano 

 Speriamo di trovare la soluzione ! :-)
Di seguito i miei risultati.
BCB5:
inizialmente un problema con intptr_t non definito. Risolto 
quello compila correttamente con 26 warning.
TurboC++ Explorer (installato all'uopo):
Compila subito correttamente con 31 warning.
HTH,
-- 
Stefano Frosio
www.esse-effe.com


Non tanto. :-)
Allora a cosa può essere dovuto il problema con CodeGear?
Grazie anche a te per la disponibilità.
Cristiano 

 Grazie anche a te per la disponibilità.
Figurati.
-- 
Stefano Frosio
www.esse-effe.com

 in pratica è quello che ho fatto io, ma giusto per capire...
Farò qualche prova.
Cristiano 

 Farņ qualche prova.
Dalle prove che ho fatto, mi sembra che C++ Builder 2007 sia un po' troppo 
bacato, guardate che roba:
http://dn.codegear.com/article/36953
Il problema con vector l'ho risolto impostando la compatibilitą su "ANSI" e 
poi di nuovo su "Borland" e cosģ ha compilato (!?). Perņ, adesso s'inchioda 
su un presunto "access overrun" (in realtą inesistente). BCB6 compila ed 
esegue correttamente il programma.
Che delusione! :-(
Cristiano 

 compilato (!?).
Questo mi fa pensare che c'era qualcosa di strano nelle opzioni 
del progetto. Hai provato anche a fare un "build" completo vero?
-- 
Stefano Frosio
www.esse-effe.com

 del progetto. Hai provato anche a fare un "build" completo vero?
Sì, ero costretto a farlo ad ogni compilazione perché saltava fuori 
"Internal compiler error" (me ne sono accorto in seguito).
Ma anche ci fossero state impostazioni "strane" l'eseguibile non deve 
inchiodarsi senza motivo.
Cristiano 

 non deve inchiodarsi senza motivo.
D'accordo, però questo aspetto è la prima volta che lo riporti, 
finora stavamo tentando di risolvere un altro problema (problema 
che, ricordo, non ho avuto con TurboC++ Explorer).
-- 
Stefano Frosio
www.esse-effe.com