Uso variabili statiche

di il
3 risposte

Uso variabili statiche

Salve a tutti, sto studiando la programmazione ad oggetti e ho un problema con l'uso delle variabili statiche.
Come programma sto utilizzando Code :: Blocks, quando vado a compilare il programma mi restituisce il seguente errore:

error:id returned 1 exit status

Il programma è il seguente(è suddiviso in tre file):
il programma principale che richiama la classe:

#include <iostream>
#include "Counter.h"
using namespace std;

int main()
{
	int i;
	cout << "inserire numero: " << endl;
	cin>>i;

	Counter c;
	c.somma(i);
	c.stampa();



	return 0;
}




Il file contenente la dichiarazione della classe:

#ifndef COUNTER_H_INCLUDED
#define COUNTER_H_INCLUDED

class Counter
{
private:
	static int contatore;
	int valore;
public:
	Counter();
	virtual ~Counter();
	void somma(int x);
	void stampa();
};



#endif // COUNTER_H_INCLUDED


Infine c'è il file contenente l'implementazione della classe:


#include <iostream>
#include "Counter.h"

using namespace std;

Counter::Counter()
{
	// TODO Auto-generated constructor stub
	    contatore = 0;
		valore = 0;
}

Counter::~Counter() {
	// TODO Auto-generated destructor stub
}

void Counter :: somma(int x)
{
	valore = valore + x;
	contatore ++;
}

void Counter :: stampa()
{
	cout<<"valore: " <<valore;
	cout<<"cont: " << contatore;
}




Lo stesso codice funziona se vado a togliere il termine static all'interno della file header, inserendolo iniziano i problemi; inoltre il compilatore mi restituisce anche il seguente errore:

undefined reference to 'Counter::contatore


Grazie

3 Risposte

  • Re: Uso variabili statiche

    1) le variabili static vanno inizializzate fuori da qualsiasi cosa (quindi fuori dal costruttore) nel file .cpp della classe.
    2) se non specifichi istruzioni per il distruttore non ha senso overloaddarlo (nè tantomeno metterlo virtual).
  • Re: Uso variabili statiche

    Ovvero scriverai

    int Counter::contatore = 0;
  • Re: Uso variabili statiche

    Ho capito, ora funziona.
    Grazie a tutti per l'aiuto.
Devi accedere o registrarti per scrivere nel forum
3 risposte