Problema en c++

Alguien me puede decir que hay mal en la instanciación de la clase??? codeblocks me dice referencia a fecha::fecha son definir

#ifndef FECHA_H_
#define FECHA_H_
#include <string>

class fecha{
  public:
  int dia,mes ,anno;
  fecha();
  fecha(int d,int m,int a);
  fecha(int d,int m);
  fecha(int d);
  fecha(const fecha& f);
  fecha(std::string f);

private:
  int obtenerDiaSistema();
  int obtenerMesSistema();
  int obtenerAnnoSistema();
};

#endif


no incluyo el .cpp enterp porque es muy largo pero aqui esta el codigo del construcctor que falla
fecha::fecha(){
    std::cout<<"aa"<<std::endl;//esto solo era para probar si funcionaba..
}

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

using namespace std;
int main(){
    fecha f=fecha();//aqui esta el problema

}
wenassss

fecha f=f.fecha();//aqui esta el problema


te faltaba referenciar el objeto f al que llamar fecha()
Lok escribió:wenassss

fecha f=f.fecha();//aqui esta el problema


te faltaba referenciar el objeto f al que llamar fecha()

gracias,pero ahora al ponerlo así me dice uso invalido de fecha::fecha :-?
yo solo estoy empezando en c++,
pero si usas,
using namespace std;

creo que la linea tendria que ser

    cout<<"aa";//esto solo era para probar si funcionaba.
Lok escribió:yo solo estoy empezando en c++,
pero si usas,
using namespace std;

creo que la linea tendria que ser

    cout<<"aa";//esto solo era para probar si funcionaba.

eso ya lo quite y sigue igual
prueba esto

fecha f.fecha();
Parece que lo del constructor esta solucionado pero al acceder a un método me dice "error: solicitud por el miembro ‘getDia’ en ‘f’, el cual es del tipo ‘fecha()’ que no es clase"
pongo el codigo aqui simplificado para que se vea mas fácilmente

#ifndef FECHA_H
#define   FECHA_H

class fecha {
    int n;
public:
    fecha();
    int getDia();
private:
    int dia;
    int mes;
    int anno;
};

#endif   /* FECHA_H */


#include "fecha.h"

fecha::fecha() {
    dia=1;
    mes=1;
    anno=2013;
}
int fecha::getDia(){
    return dia;
}


#include "fecha.h"
#include <cstdlib>

using namespace std;
/*
*
*/
int main(int argc, char** argv) {
    fecha f();
    f.getDia();// aqui me da el error que mencione antes
    return 0;
}
#include "fecha.h"
#include <cstdlib>

using namespace std;
/*
*
*/
int main(int argc, char** argv) {
    fecha f();
    f.getDia();// aqui me da el error que mencione antes
    return 0;
}


f.getDia() devuelve un valor y no lo asignas en ningun sitio
modificado:
#include "fecha.h"
#include <cstdlib>

using namespace std;
/*
*
*/
int main(int argc, char** argv) {
    int dia;
    fecha f();
    dia=f.getDia();// aqui me da el error que mencione antes
    return 0;
}
Lok escribió:
#include "fecha.h"
#include <cstdlib>

using namespace std;
/*
*
*/
int main(int argc, char** argv) {
    fecha f();
    f.getDia();// aqui me da el error que mencione antes
    return 0;
}


f.getDia() devuelve un valor y no lo asignas en ningun sitio
modificado:
#include "fecha.h"
#include <cstdlib>

using namespace std;
/*
*
*/
int main(int argc, char** argv) {
    int dia;
    fecha f();
    dia=f.getDia();// aqui me da el error que mencione antes
    return 0;
}

tampoco funciona
class CFecha // consejo, es mas facil leer el codigo si diferencias de alguna manera los tipos construidos...
{                // en este caso C mayuscula de clase y la primera del nombre en mayuscula
private:
    int dia;
    int mes;
    int anno;
    int n;

public:
    CFecha();
    int getDia();
};

CFecha::CFecha()
{
    dia=1;
    mes=1;
    anno=2013;
}

int CFecha::getDia()
{
    return dia;
}

#include <cstdlib>

using namespace std;

int main(int argc, char **argv)
{
    CFecha fecha;//<-- no hace falta (), ya que se llama automaticamente el constructor.
    int dia;
    dia=fecha.getDia();//<-- siempre se tiene que referenciar el objeto a que pertenece la funcion a llamar
    return 0;
}


asi me compila y linka perfectamente...
uso gcc por si acaso influye..
aunque no creo, ya que el codigo es muy simple...
10 respuestas