Newsgroup: it.comp.lang.c++
Titolo: AIUTO!!! BCB 3 e STL, ma funzionano o no?

Ho la versione 3.0 del Borland C++Builder. Volevo utilizzare la STL
(Standard Template Library) e, per provare, ho creato un semplice
progetto, quindi con una finestra vuota.
Nella unit della finestra ho inserito
#include <vector>
e al "Create" della finestra ho messo
vector<int> vecPippo;
compilo e mi dice che "vector" è un simbolo non definito. Allora ho
provato a mettere l'include dopo il #pragma hdrstop, magari c'era
qualche problema. Stesso risultato... ho provato a metter .h
nell'include: stesso risultato. Ho provato a toglierlo, stesso
risultato. Ho aperto il file vector.h (perché non ho trovato vector e
basta negli include del BCB????) ed eccola là la definizione della
classe vector.
Dunque?!?!?!?!?!
Uhm... in un successivo momento, mi sono scaricato dal sito SGI la
versione nuova delle STL... che mi sembra parecchio differente da
quella che ho io (ad esempio, appunto, in questa nuova ci sono le
nuove definizioni nei file senza .h).
Però ho provato a creare una subdirectory STL in Include e a inserire
questa sottodirectory nel path del compilatore (e quindi ho messo
#include <STL\vector>)... non riesce a compilare, dà una marea di
errori proprio in quei file. Allora ho sostituito direttamente i nuovi
file a quelli nella directory Include... stesso risultato
(ovviamente).
Insomma, ma si possono usare queste STL con il BCB3 o no? La guida in
linea dice espressamente di sì.
Un'ultima cosa: ho notato che negli esempi che ho scaricato, si
utilizza semplicemente 
vector<int> vecPippo;
mentre negli esempi presenti nel BCB vedo che è necessario (o per lo
meno lo fa sempre) dichiarare
vector<int, allocator<int> > vecPippo;
mi spiegate??
MadMage


devi utilizzare il namespace std
o std::vector<int>vecpippo
o all'inizio del file using namespace s
caio Nicola


#include <vector>
std::vector<int> vecPippo;
oppure
#include <vector>
using std::vector;
vector<int> vecPippo;
oppure ancora
#include <vector>
using namespace std;
vector<int> vecPippo;
Paolo

vector<int> vecPippo;
Dovevi mettere
  std::vector<int> vecPippo;
oppure aggiungere la dichiarazione
  using std::vector;
oppure (sconsigliabile) aggiungere la direttiva
  using namespace std;
Riguardo al punto in cui affermi di non capire gli
include file di sistema dovresti stare attento al
fatto che il compilatore e' libero di barare quanto
vuole in quel campo. In particolare che tu scriva
  #include <iostream>
non significa che un compilatore debba necessariamente
aprire un file chiamato "iostream" oppure "iostream.h"
oppure "iostream.stl".
Per assurdo potrebbe semplicemente impostare un flag
per ricordarsi che ora sei autorizzato ad utilizzare
le classi di iostream che potrebbero essere cablate
nel codice del compilatore stesso.
HTH
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

 mi spiegate??
La dichiarazione esatta del template vector è la seguente:
template <class T, class Allocator = allocator<T> >
class vector ;
dalla quale si vede che il secondo parametro del template ha un valore
di default e quindi non è necessario specificarlo a meno che non si
voglia utilizzare un proprio allocatore.
EMG


bene... quindi a questo punto posso fare un'altra domanda a cui non
farete fatica a rispondere:
COSE'E' un NAMESPACE?
MadMage

 COSE'E' un NAMESPACE?
E' una struttura di programmazione all'interno della quale si
definiscono dei nomi (tipi, funzioni) ai quali ci si dovrà quindi
riferire attraverso il loro nome completo namespace::nome. Questo
meccanismo è stato introdotto nel C++ per evitare nomi duplicati
provenienti da librerie diverse. Es.:
namespace pippo
{
    // Qui definisco i miei tipi, funzioni, etc.
    void pluto() {}
};
// Per chiamare pluto dall'esterno del namespace pippo devo scrivere
pippo::pluto();
EMG


scusa, perché è sconsigliabile?
ciao,
  Giovanni

COSE'E' un NAMESPACE?
Essenzialmente una raccolta di nomi...
E` stato introdotto per evitare i conflitti tra identificatori
appartenenti a librerie diverse e/o moduli di uno stesso
programma (che possono essere sviluppati da gruppi di lavori
indipendenti).
Paolo