PDA

View Full Version : [C++]Problema Get-Set


Kleidemos
23-03-2003, 10:18
Ho questa lib mia:

// files : head.h
#include <string>
#ifndef HEAD_H
#define HEAD_H

// la struttura delle persona
class Persona
{
private:
char* nome;// il nome
char* cognome;//il cognome
int anno;//anno
public:
Persona(char*, char*, int);
Persona();
char getNome();
char getCognome();
char setNome(char* nm);
char setCognome(char* cgn);
int setAnno();
int getAnno(int ann);
};
// costruttore vuoto
Persona::Persona()
{
}
//costruttore con argomenti
Persona::Persona(char* nm, char* cgn, int ann=0)
{
nome = nm;
cognome = cgn;
anno = ann;
}
// ritorna il nome
char Persona::getNome()
{
std::cout << nome;
return nome;
}
// ritorna il cognome
int Persona::getAnno()
{
std::cout << anno;
return anno;
}
// ritorna l'anno di nascita
char Persona::getCognome()
{
std::cout << cognome;
return cognome;
}
// setta il nome
char Persona::setNome(char* nm)
{
nome = nm;
return nome;
}
// setta il cognome
int Persona::setAnno(int ann)
{
anno = ann;
return anno;
}
// setta l'anno di nascita
char Persona::setCognome(char* cgn)
{
cgn = cognome;
return cognome;
}
#endif

Ma mi rida:

:\documents and settings\admin\desktop\gest\head.h(38) : error C2440: 'return' : cannot convert from 'char *' to 'char'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
c:\documents and settings\admin\desktop\gest\head.h(42) : error C2511: 'getAnno' : overloaded member function 'int (void)' not found in 'Persona'
c:\documents and settings\admin\desktop\gest\head.h(8) : see declaration of 'Persona'
c:\documents and settings\admin\desktop\gest\head.h(50) : error C2440: 'return' : cannot convert from 'char *' to 'char'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
c:\documents and settings\admin\desktop\gest\head.h(56) : error C2440: 'return' : cannot convert from 'char *' to 'char'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
c:\documents and settings\admin\desktop\gest\head.h(60) : error C2511: 'setAnno' : overloaded member function 'int (int)' not found in 'Persona'
c:\documents and settings\admin\desktop\gest\head.h(8) : see declaration of 'Persona'
c:\documents and settings\admin\desktop\gest\head.h(68) : error C2440: 'return' : cannot convert from 'char *' to 'char'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast



Ma nn capisco cosa sbaglio?
Sono semplici get e set :(

soalle
23-03-2003, 10:24
Consiglio già dato in passato... dividi file header (dichiarazioni) e file cpp (definizioni)

Kleidemos
23-03-2003, 10:34
Originally posted by "soalle"

Consiglio già dato in passato... dividi file header (dichiarazioni) e file cpp (definizioni)

Sono abituato a fare cosi!
Che faccio di male??

Cmq ekko:

// files : head.h
#include <string>
#ifndef HEAD_H
#define HEAD_H

// la struttura delle persona
class Persona
{
private:
char* nome;// il nome
char* cognome;//il cognome
int anno;//anno
public:
Persona(char*, char*, int);
Persona();
char getNome();
char getCognome();
char setNome(char* nm);
char setCognome(char* cgn);
int setAnno();
int getAnno(int ann);
};
#endif

Kleidemos
23-03-2003, 10:36
// files : Princ.cpp
#include <iostream>
#include <string>
#include "head.h"

using namespace std;

void main()
{
cout<<"\n";
}

// ----------------------------------------
// Definizioni
// ----------------------------------------
// costruttore vuoto
Persona::Persona()
{
}
//costruttore con argomenti
Persona::Persona(char* nm, char* cgn, int ann=0)
{
nome = nm;
cognome = cgn;
anno = ann;
}
// ritorna il nome
char Persona::getNome()
{
std::cout << nome;
return nome;
}
// ritorna il cognome
int Persona::getAnno()
{
std::cout << anno;
return anno;
}
// ritorna l'anno di nascita
char Persona::getCognome()
{
std::cout << cognome;
return cognome;
}
// setta il nome
char Persona::setNome(char* nm)
{
nome = nm;
return nome;
}
// setta il cognome
int Persona::setAnno(int ann)
{
anno = ann;
return anno;
}
// setta l'anno di nascita
char Persona::setCognome(char* cgn)
{
cgn = cognome;
return cognome;
}



c:\documents and settings\admin\desktop\gest\princ.cpp(31) : error C2440: 'return' : cannot convert from 'char *' to 'char'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
c:\documents and settings\admin\desktop\gest\princ.cpp(35) : error C2511: 'getAnno' : overloaded member function 'int (void)' not found in 'Persona'
c:\documents and settings\admin\desktop\gest\head.h(8) : see declaration of 'Persona'
c:\documents and settings\admin\desktop\gest\princ.cpp(43) : error C2440: 'return' : cannot convert from 'char *' to 'char'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
c:\documents and settings\admin\desktop\gest\princ.cpp(49) : error C2440: 'return' : cannot convert from 'char *' to 'char'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
c:\documents and settings\admin\desktop\gest\princ.cpp(53) : error C2511: 'setAnno' : overloaded member function 'int (int)' not found in 'Persona'
c:\documents and settings\admin\desktop\gest\head.h(8) : see declaration of 'Persona'
c:\documents and settings\admin\desktop\gest\princ.cpp(61) : error C2440: 'return' : cannot convert from 'char *' to 'char'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast[

cionci
23-03-2003, 10:59
Le cose sono due...o usi string o usi i char *...nel caso che tu usi i char * devi allocare o staticamente o dinamicamente lo spazio per contenere le stringhe ed usare strcpy (non puoi assegnare direttamente il puntatore come fai ora) per copiare le stringhe passate in quelle locali alla classe...

Se usi string puoi fare così:

// files : Princ.cpp
#include <iostream>
#include <string>
#include "head.h"

using namespace std;

void main()
{
Persona p("a", "b", 1999);
p.getNome();
p.getCognome();
p.setCognome("ciao");
p.setNome("Pippo");
p.getNome();
p.getCognome();
}

// ----------------------------------------
// Definizioni
// ----------------------------------------
// costruttore vuoto
Persona::Persona()
{
}
//costruttore con argomenti
Persona::Persona(char* nm, char* cgn, int ann=0)
{
nome = nm;
cognome = cgn;
anno = ann;
}
// ritorna il nome
const char *Persona::getNome() const
{
cout << nome;
return nome.c_str();
}
// ritorna il cognome
const int Persona::getAnno()
{
cout << anno;
return anno;
}
// ritorna l'anno di nascita
const char *Persona::getCognome() const
{
cout << cognome;
return cognome.c_str();
}
// setta il nome
const char *Persona::setNome(const char* nm)
{
nome = nm;
return nome.c_str();
}
// setta il cognome
const int Persona::setAnno(const int ann)
{
anno = ann;
return anno;
}
// setta l'anno di nascita
const char *Persona::setCognome(const char* cgn)
{
cognome = cgn;
return cognome.c_str();
}
Se scrivi using namespace std; puoi elimiare std:: davanti a cin e cout...

// files : head.h
#include <string>
using namespace std;
#ifndef HEAD_H
#define HEAD_H

// la struttura delle persona
class Persona
{
private:
string nome;// il nome
string cognome;//il cognome
int anno;//anno
public:
Persona(char*, char*, int);
Persona();
const char *getNome() const;
const char *getCognome() const;
const char *setNome(const char* nm);
const char *setCognome(const char* cgn);
const int setAnno(const int ann);
const int getAnno();
};
#endif

Comunque ne avevi fatto di casino :)

Kleidemos
23-03-2003, 11:26
perche quel .c_str(); ???
Sono prorpio un disastro :cry:

cionci
23-03-2003, 17:05
Serve per convertire ritorna il contenuto della classe string nel classico modo della libreria standard C (vettore di char terminato da \0)...