Newsgroup: it.comp.lang.c++
Titolo: multiple declaration?

class Bottone{
   public:
   int valore;
   Bottone *succPTR;
   };
il compilatore mi da il suddetto errore sulla prima riga, perchč? anzi, due
errori, uno multiple declaration for "bottone" e l'altro earlier.
grazie ancora, scusate per l'ammasso di domande
ivan

"Ivan Sofa n.1" <dromeda...@inwind.itDELETE> wrote in message
news:2gWY9.49304$YG2.1...@twister1.libero.it...

Suppongo che la class Bottone che hai postato sia in un header file,
chiamiamolo bottone.h o no?
Nel qual caso controlla che in testa al tuo file header ci sia qualcosa del
genere:
// file bottone.h
#ifndef BOTTONE_H
#define BOTTONE_H
// qui tutto il tuo codice fra cui la class Bottone
// alla fine
#endif
Maurus

 ha scritto nel messaggio
news:b11bll$udb1a$1...@ID-125555.news.dfncis.de...
|
grazie, ho risolto il problema.
ora ho l'ultimo maledetto "freno".... :-)
al momento del make all, ricevo questi due errori:
unresolved external 'Lista::crealista()' referenced from
c:\....firstlista.obj
unresolved external 'Lista::inserisci(int)' referenced from
c:\....firstlista.obj
lista è una classe, ovviamente.
Non capisco il problema, poichè errori di sintassi non ce ne sono in nessuno
degli header e dei cpp. Cosa significa quell'errore?
ivan

"Ivan Sofa n.1" <dromeda...@inwind.itDELETE> wrote in message
news:6wWY9.49384$YG2.1...@twister1.libero.it...

Probabilmente hai crealista() e inserisci(int) solo come definizioni nella
tua classe.
Ma non le hai implementate nei tuoi cpp.
Mancano quindi i metodi:
void Lista::crealista() // non so se e' void
{
    //crea la lista
}
e
void Lista::inserisci(int) // non so se e' void
{
// inserisci int in lista
}
nel tuo file lista.cpp
ma li hai nel tuo header lista.h
e vengono usati.
Oppure se li avessi, non hai incluso l'header file lista.h nel file dove li
stai chiamando.
Maurus

 ha scritto nel messaggio
| > news:b11bll$udb1a$1...@ID-125555.news.dfncis.de...
| > |
| >
| > grazie, ho risolto il problema.
| >
| > ora ho l'ultimo maledetto "freno".... :-)
| > al momento del make all, ricevo questi due errori:
| >
| > unresolved external 'Lista::crealista()' referenced from
| > c:\....firstlista.obj
| > unresolved external 'Lista::inserisci(int)' referenced from
| > c:\....firstlista.obj
| >
| > lista è una classe, ovviamente.
| >
| > Non capisco il problema, poichè errori di sintassi non ce ne sono in
| nessuno
| > degli header e dei cpp. Cosa significa quell'errore?
| >
| > ivan
| >
|
| Probabilmente hai crealista() e inserisci(int) solo come definizioni nella
| tua classe.
| Ma non le hai implementate nei tuoi cpp.
l'ho implementate! ma sembra che non le "legga"! le ho inserite, le
implementazioni in lista.cpp e le dichiarazioni in lista.h che contiene la
classe lista. ma niente!
|
| Mancano quindi i metodi:
| void Lista::crealista() // non so se e' void
| {
|     //crea la lista
| }
|
| e
|
| void Lista::inserisci(int) // non so se e' void
| {
| // inserisci int in lista
| }
|
| nel tuo file lista.cpp
| ma li hai nel tuo header lista.h
| e vengono usati.
|
| Oppure se li avessi, non hai incluso l'header file lista.h nel file dove
li
| stai chiamando.
|
spiega meglio questo punto, non vorrei aver capito male qualcosa.
in conclusione lista.cpp devo chiamarlo da qualche parte? tipo #include???
HELP!
ivan


E' proprio qui il punto che non ho capito.
Se tu avessi un terzo file pippo.cpp dove stai chiamando quei metodi
Lista::crealista() e Lista::inserisci(int),
allora:
 o devi avere in testa a pippo.cpp l' #include "lista.h"
oppure se in testa a pippo.cpp hai #include "pippo.h" allora necessariamente
in pippo.h dovrai includere lista.h
Solo cosi' mi spiego l'errore del linker.
Maurus

 ha scritto nel messaggio
news:b11irp$u7m1i$1...@ID-125555.news.dfncis.de...
|
| "Ivan Sofa n.1" <dromeda...@inwind.itDELETE> wrote in message
| news:s1YY9.50381$ZE.14...@twister2.libero.it...
| >
| >
| > l'ho implementate! ma sembra che non le "legga"! le ho inserite, le
| > implementazioni in lista.cpp e le dichiarazioni in lista.h che contiene
la
| > classe lista. ma niente!
| >
|
| Ok come non detto.
| Ma fammi capire, nel tuo progetto hai solo questi 2 files? lista.cpp e
| lista.h?
|
| > |
| > | Oppure se li avessi, non hai incluso l'header file lista.h nel file
dove
| > li
| > | stai chiamando.
| > |
| >
| > spiega meglio questo punto, non vorrei aver capito male qualcosa.
| > in conclusione lista.cpp devo chiamarlo da qualche parte? tipo
#include???
| >
|
| E' proprio qui il punto che non ho capito.
ho firstlista.cpp che chiama lista.h. le implementazioni di lista.h sono
presenti in lista.cpp.
che devo fare?
ti ringrazio per la tua infinita pazienza e disponibilità!
ivan


Quindi riassumendo mi confermi cio' che ho capito:
hai un progetto con 3 files:
lista.cpp
lista.h
firstlista.cpp
in firstlista.cpp includi lista.h
in lista.cpp includi lista.h
le dichiarazioni di classe lista e suoi metodi sono in lista.h
le implementazioni dei metodi della classe lista sono in lista.cpp
A questo punto le cose sono 2:
- o tu stai usando dei templates, e in questo caso dovresti mettere tutto
(definizioni e dichiarazioni in lista.h)
(Ma non mi sembra il tuo caso).
- oppure c'e' qualcosa di sbagliato nel make che non ti fa avere nel
progetto che sta linkando tutti i tuoi files.
Che compilatore stai usando e come e' fatto il make?
Maurus

 ha scritto nel messaggio
news:b11lgb$uhf33$1...@ID-125555.news.dfncis.de...
|
| "Ivan Sofa n.1" <dromeda...@inwind.itDELETE> wrote in message
| news:REYY9.50545$ZE.14...@twister2.libero.it...
| >
| > ho firstlista.cpp che chiama lista.h. le implementazioni di lista.h sono
| > presenti in lista.cpp.
| >
| > che devo fare?
| >
| > ti ringrazio per la tua infinita pazienza e disponibilità!
| >
| > ivan
| >
|
| Quindi riassumendo mi confermi cio' che ho capito:
| hai un progetto con 3 files:
| lista.cpp
| lista.h
| firstlista.cpp
|
| in firstlista.cpp includi lista.h
| in lista.cpp includi lista.h
| le dichiarazioni di classe lista e suoi metodi sono in lista.h
| le implementazioni dei metodi della classe lista sono in lista.cpp
|
| A questo punto le cose sono 2:
| - o tu stai usando dei templates, e in questo caso dovresti mettere tutto
| (definizioni e dichiarazioni in lista.h)
| (Ma non mi sembra il tuo caso).
infatti non è il mio caso.
| - oppure c'e' qualcosa di sbagliato nel make che non ti fa avere nel
| progetto che sta linkando tutti i tuoi files.
|
| Che compilatore stai usando e come e' fatto il make?
|
la mia supposizione è la stessa ma da parte tua vedo molta più competenza!
sto usando il borland c++ 5.02.
cosa intendi per come è fatto il make?
grazie ancora!
ivan

 ivan
Il fatto e' che non ho mai usato il BorlandC++ 5.02 e penso sia uno di quei
compilatori senza IDE e che lavorano a linea di comando.
Per cui non so se il make e' stato fatto a mano o e' in qualche modo
automatico.
Il tuo progetto e' fatto di 3 files, per cui il file del make deve in
qualche modo conoscere il nome di questi 3 files per poterli linkare.
Ora tu compilando hai ottenuto 2 files .obj : lista.obj e firslista.obj
Dovresti innanzitutto controllare che questi 2 files .obj siano stati
creati.
Una volta fatto questo dovresti aprire il tuo makefile (non conosco il nome
ma dovresti cercare nell'help files del borland come si chiama il makefile
in un progetto) e controllare che al suo interno vi siano riferimenti a
questi 2 files.obj, affinche' possa linkarli e creare l'eseguibile.
Maurus

 ha scritto nel messaggio
news:b11m9n$uctvm$1...@ID-125555.news.dfncis.de...
|
| "Ivan Sofa n.1" <dromeda...@inwind.itDELETE> wrote in message
| news:lSYY9.50609$ZE.14...@twister2.libero.it...
| >
| > la mia supposizione č la stessa ma da parte tua vedo molta piů
competenza!
| > sto usando il borland c++ 5.02.
| > cosa intendi per come č fatto il make?
| >
| > grazie ancora!
| >
| > ivan
|
| Il fatto e' che non ho mai usato il BorlandC++ 5.02 e penso sia uno di
quei
| compilatori senza IDE e che lavorano a linea di comando.
| Per cui non so se il make e' stato fatto a mano o e' in qualche modo
| automatico.
| Il tuo progetto e' fatto di 3 files, per cui il file del make deve in
| qualche modo conoscere il nome di questi 3 files per poterli linkare.
| Ora tu compilando hai ottenuto 2 files .obj : lista.obj e firslista.obj
| Dovresti innanzitutto controllare che questi 2 files .obj siano stati
| creati.
| Una volta fatto questo dovresti aprire il tuo makefile (non conosco il
nome
| ma dovresti cercare nell'help files del borland come si chiama il makefile
| in un progetto) e controllare che al suo interno vi siano riferimenti a
| questi 2 files.obj, affinche' possa linkarli e creare l'eseguibile.
|
cercherň di seguire i tuoi consigli!
ho controllato e i due .OBJ sono stati creati.
questo makefile potrebbe avere qualche nome classico? una estensione?
purtroppo su questo non so che pesci pigliare :-(
ho anche il DEV-C++ 3.99. quello puň andare bene?
ma possibile che il borland che usa cosě tanta gente crei di questi
problemi?
ivan

 ha scritto nel messaggio
news:b11m9n$uctvm$1...@ID-125555.news.dfncis.de...
CUT CUT CUT
semplicemente: ci potrebbero essere delle gerarchie di cartelle da
rispettare? tipo che i cpp gli header devono stare nella stessa cartella?
io li tengo tutti (header e cpp) in una sottocartella di documenti.
se ho sbagliato qui esulto comunque e poi mi vergogno!
ivan


Ma no, e' solo questione di sapere una volta per tutte come va creato il
makefile, poi le prossime volte sara' liscio.
Comunque se tu guardassi l'help o il readme del borland sono sicuro che
trovi subito come fare.
Maurus

 purtroppo su questo non so che pesci pigliare :-(
Crerdo che semplicemente la situazione sia questa:
Hai lista.cpp che include lista.h
quindi compili con
bcc32 lista.cpp
(dove bcc32 č il comendo per chiamare il compilatore dal 5.4 in poi,
il 5.1 non so)
A questo punto ottieni il file lista.obj
Poi, immagino, hai il file firstlista.cpp che contiene il main()
e include lista.h
A questo punto, per compilarlo ti basta fare
bcc32 firstlista.cpp lista.obj
indicando in questo modo al compilatore di compilare
firstlista.cpp e al linker di linkarlo con lista.obj
Cosě dovrebbe funzionare.
--
Gerolamo

 ha scritto nel messaggio
news:ri0Z9.50535$YG2.1...@twister1.libero.it...
CUT CUT CUT
ragazzi, il discorso va tutto visto nel borland c++ 5.02 per windows!
non utilizzo la riga di comando purtroppo. Prima per qualcosina per il C
usavo il linux e l'utilizzo da consolle ma ora, per questioni universitarie,
sono *costretto* ad utilizzare il Borland.
Io edito i files che mi servono (sia header che cpp) e poi, dopo averli
salvati, faccio il COMPILE dal cpp principale (quello che richiama tutti gli
altri sia direttamtne che indirettamente). Il COMPILE mi da OK. dopodichè
faccio MAKE ed è qui che appare il famigerato errore. In pratica non trova
le chiamate nei file .obj.
cosa fare?
addirittura non sembra un errore del mio codice poichè lo stesso problema
accade ad un mio amico di università con lo stesso borland ma con programma
diverso (scritto in C questa volta)
vi ringrazio sentitamente!
ivan