Quote:
Originariamente inviato da pixie
Sisisi Tomminno scusa... gli atoi sono dentro a un metodo nel campo public... scusa non mi sono accorto dell'errore
|
Ci sarebbe da dire che "
public" non è un campo, e che non basta che siano inizializzati in
un metodo, ma è necessario che siano inizializzati in un
costruttore (che poi questo sia pubblico o meno non è rilevante).
Ad esempio:
Codice:
#include <iostream>
#include <string.h>
class Oggetto {
private:
char* m_str;
public:
Oggetto()
{}
~Oggetto()
{
delete[] m_str;
}
void initialize()
{
m_str = new char[1024];
}
unsigned int getLength()
{
return strlen(m_str);
}
};
int main()
{
Oggetto obj;
std::cout << obj.getLength() << std::endl;
}
questo codice ti darebbe un segmentation fault, visto che utilizzi in
getLength() un puntatore che non è stato inizializzato. Ciò ti darebbe problemi anche con il solo distruttore, che cercherebbe di cancellare una zona di memoria mai allocata.
Invece:
Codice:
#include <iostream>
#include <stdlib.h>
#include <string.h>
class Oggetto {
private:
char* m_str;
public:
Oggetto()
{
m_str = new char[1024];
}
~Oggetto()
{
delete[] m_str;
}
unsigned int getLength()
{
return strlen(m_str);
}
};
int main()
{
Oggetto obj;
std::cout << obj.getLength() << std::endl;
}
questo codice sicuramente farà ciò che ti aspetti (proprio visto che
m_str viene inizializzato nel costruttore, e quindi sarà immediatamente disponibile quando usi qualche metodo dell'oggetto).
ciao