C++ Singleton

Ciao.
Ho due piccoli problemi scrivendo una classe Singleton (cioè una classe
della quale può esistere solo un oggetto):
1) compilando il programma (p.e. quello allegato) con "gcc -o justtest *cc",
ricevo errori del linker dicendo "undefined reference to justTest::inst".
inst è una variabile statica, perciò dovrebbe ben essere accessibile anche se
nessun oggetto esiste, o no?
2) come faccio a inizializzare inst? Volendo farlo al momento della
definizione, mi dà un errore "Iso C++ forbids in-class initialization of non-const
static member inst".

tia per tutte le risposte.

singleton.tar.gz (513 Bytes)

Ciao,

ammetto di non aver guardato il tuo codice :frowning:

Comunque una ricerca su google di "design patterns singleton C++"
fornisce una lunga lista di siti: questa sembra essere
una homepage con informazioni ed esempi (in C++):

http://home.earthlink.net/~huston2/dp/patterns.html

Good luck,
Chris.

Grazie Chris,
ma apparte da che in questi esempi mettono tutto nello stesso file mentre io
ne ho tre, è proprio la stessa cosa che ho scritto io.
E infatti, anche compilando uno dei esempi, ricevo un sacco di errori da ld.

ma apparte da che in questi esempi mettono tutto nello stesso file mentre io
ne ho tre, è proprio la stessa cosa che ho scritto io.
E infatti, anche compilando uno dei esempi, ricevo un sacco di errori da ld.

Hmmm... se nessuno risolve il tuo problema, stasera dovro` soffiare
la polvera dai miei libri su C++ e rileggermi alcune cose...

Altrimenti fattemi sapere!

Bye, Chris.

Benjamin Gufler wrote:

ma apparte da che in questi esempi mettono tutto nello stesso file mentre io
ne ho tre, è proprio la stessa cosa che ho scritto io.
E infatti, anche compilando uno dei esempi, ricevo un sacco di errori da ld.

Devi allocare e inizializzare le variabili statiche della classe
justTest.

p.es la app.cc diventa:
---app.cc begin---
#include "justtest.h"
#include <stdio.h>

justTest* justTest::inst = 0;

int main (void)
{
...
---app.cc end---

E ti consiglio di utilizzare make. Risparmi un sacco di tempo avendo
diviso il progetto in diversi file e non devi compilare sempre _tutti_
gli file.

---Makefile begin---
CXX = g++
CXXFLAGS += -Wall -pedantic

all: app

clean:
  rm -f app app.o justtest.o

app: app.o justtest.o justtest.h
  $(CXX) $(LDFLAGS) $(LOADLIBES) $(LDLIBS) app.o justtest.o -o app

app.o: app.cc justtest.h
justtest.o: justtest.cc justtest.h

---Makefile end---
Le righe 7 e 10 *devono* incominciare con un tabulatore.

saluti,
Thomas

Danke, Thomas. Jetzt funkt's :slight_smile:
Bei dem Programm, für das ich das brauche, hab' ich schon ein Makefile;
dieses Beispiel hab' ich nur schnell geschrieben weil ich das andere zu Hause
vergessen habe.
Trotzdem, danke auch für den Tipp.