Novato en c++

Iniciandome en ++ he llegado a un error que no se porque es,el netbeans me da este error " error: conversión inválida de ‘numero*’ a ‘int’ [-fpermissive]" he marcado las lineas donde me da error ,a ver si alguien me aclara un poco ;)

Este es el .h
#ifndef NUMERO_H
#define   NUMERO_H

class numero{
        public:
                numero();//constructor
                numero(int num);//constructor
                void incremento(int n);
                void decremento(int n);
                numero getN();
        private:
            int n;
} ;
#endif   /* NUMERO_H */

Y este el cpp
#include <cstdlib>
#include "numero.h"

using namespace std;

numero::numero(){
}
numero::numero(int num){
    n=num;
}
void numero::incremento(int n){
    n=n+1;
}
void numero::decremento(int n){
    n=n-1;
}
numero numero::getN(){
    numero num=new numero(n);//aqui da error
    return num;
}
int main(int argc, char** argv) {
    numero num=new numero(5);//aqui da error
    return 0;
}
Mira si esto te sirve

http://cboard.cprogramming.com/cplusplu ... ost1119810

Ahi lo declara como float, supongo que tu tendras que usar int :?
Instalando el netbeans porque el jodido Dev-C++ da un error de los gordos en windows 8 y estoy hasta los huevos de no poder usarlo.

En unos minutos te echo una manita, pero lo que veo de código ya es un poco caótico, deberías definir el funcionamiento de los métodos en numeros.h y no dentro del programa principal, en proyectos grandes te va a quedar un código colosal.


EDIT:

Me ha llevado más rato instalar una versión funcional del dev-c++ que hacer el problema.

El código del numero.h
    #ifndef NUMERO_H
    #define   NUMERO_H

    class numero{
            public:
                    numero(){
                       n=0;
                    };//constructor
                    numero(int num){
                       n=num;
                    };//constructor
                    void incremento(){
                       n+=1;
                    };
                    void decremento(){
                       n-=1;
                    };
                    int getN(){
                       return this->n;
                    };
            private:
                int n;
    } ;
    #endif   /* NUMERO_H */


Hay partes que la verdad, no las uso para nada, ya es por pura costumbre el ponerlas pero en un programa tan pequeño no pienso cambiar mi forma de programar XD. Uno de los fallos que tenías era que en "int getN(){}" tenías esto "numero getN(){}". Solucionado esto, te pongo el main y a ver si te aclaras un poco:

#include "numero.h"
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int main(int argc, char** argv) {
   numero* m;
   m= new numero(7);
   
   numero* o = new numero(450);
   numero j;
   numero l(7);
   numero k = 6;
   cout << "J vale " << j.getN() << endl;
   int i = j.getN();
   cout << "I vale " << i<<endl;
   cout << "K vale " << k.getN() << endl;
   cout << "L vale " << l.getN() << endl;
   cout << "M vale " << m->getN() << endl;
   cout << "O vale " << o->getN() << endl;
    return 0;
}


Es totalmente funcional por consola, he usado ambos constructores (sospecho que has programado en java, porque mi primer impulso ha sido el crear un objeto "numero n = new numero (7);" y luego me he roto la cabeza al ver que no me funcionaba, de la manera escrita funciona perfectamente, está preparado para recibir un valor entero) y el getN que es donde te daba el fallo. Los otro métodos son tan simples que pasaba de probarlos, de todas maneras los he abreviado un poco con un += y -= (hace sumas y restas teniendo en cuenta el valor inicial y el incremento o decremento).

Bueno, yo creo que ya está, pongo una capturita de pantalla para orientarte mejor y me piro a la cama, que mañana tengo un examen de c++ con allegro y me ha venido de perlas repasar los conceptos básicos que a veces se nos olvidan de no usarlos



EDIT2:

Me olvidaba, hay otra manera de declararlos, por ejemplo así: "numero n(7);" o "numero n = numero(7);"
Acabo de probarlas y funcionan. He editado de nuevo el código para mostrar correctamente cómo usar el new, aunque luego no me deja usar el j.getN() o lo que sea, tengo que tirar de ->.

Puff, que lio, y yo que pensaba que tenía claras algunas cosas, y veo que estoy muy pez todavía XD

Adjuntos

esto sigue fallano :S,esta vez en el cout
el .h
#ifndef NUMERO_H
#define   NUMERO_H

class numero{
        public:
                numero();//constructor
                numero(int num);//constructor
                void incremento(int n);
                void decremento(int n);
                int getN();
        private:
            int n;
} ;
#endif   /* NUMERO_H */

el .cpp
#include <cstdlib>
#include <stdlib.h>
#include <iostream>
#include "numero.h"

using namespace std;

numero::numero(){
}
numero::numero(int num){
    n=num;
}
void numero::incremento(int n){
    n=n+1;
}
void numero::decremento(int n){
    n=n-1;
}
int numero::getN(){;
    return n;
}
int main(int argc, char** argv) {
    numero* m;
    m= new numero(7);
    cout<<m.getN();
    return 0;
}
Hola,

el cout te peta porque estas poniendo cout<<m.getN(); y según veo arriba m es un puntero por lo que sería esto lo correcto cout<<m->getN();

ahora si me permites voy a darte 3 consejillos que creo que pueden serte de ayuda:

1.- Para trabajar o usar de modo profesional un equipo, usaría cualquier cosa menos windows 8, porque?
1.1 Es nuevo y no sabemos si tiene fallos ( no debería pero es microsoft) (nota: no soy anti microsoft ni nada por el estilo uso win8 en mi ordenador de ocio);
1.2 Compatibilidad con los IDEs y compiladores que ya están testeados en otros SOs, no sabemos si funcionan bien en W8;
1.3 Me parece que metro en un entorno profesional o de desarrollo sobra completamente y solo entorpece.

2.- Si quieres desarrollar en windows usaría windows 7 y probaría con el Visual c++ 2008 express edition (es gratis desde la pagina de microsoft). No te dejes engañar por el nombre es un IDE y un compilador que a mi parecer están bastante completos

3.- Si quieres usar linux pondría el último ubuntu y me bajaría por ejemplo code::blocks entre otros hay millones y la mayoría funcionan de puta madre

PD: si necesitas cualquier cosa avisa y le echamos un ojo ;)

Un saludo,
GMaister escribió:Hola,

el cout te peta porque estas poniendo cout<<m.getN(); y según veo arriba m es un puntero por lo que sería esto lo correcto cout<<m->getN();

ahora si me permites voy a darte 3 consejillos que creo que pueden serte de ayuda:

1.- Para trabajar o usar de modo profesional un equipo, usaría cualquier cosa menos windows 8, porque?
1.1 Es nuevo y no sabemos si tiene fallos ( no debería pero es microsoft) (nota: no soy anti microsoft ni nada por el estilo uso win8 en mi ordenador de ocio);
1.2 Compatibilidad con los IDEs y compiladores que ya están testeados en otros SOs, no sabemos si funcionan bien en W8;
1.3 Me parece que metro en un entorno profesional o de desarrollo sobra completamente y solo entorpece.

2.- Si quieres desarrollar en windows usaría windows 7 y probaría con el Visual c++ 2008 express edition (es gratis desde la pagina de microsoft). No te dejes engañar por el nombre es un IDE y un compilador que a mi parecer están bastante completos

3.- Si quieres usar linux pondría el último ubuntu y me bajaría por ejemplo code::blocks entre otros hay millones y la mayoría funcionan de puta madre

PD: si necesitas cualquier cosa avisa y le echamos un ojo ;)

Un saludo,

Yo suelo usar ubuntu con netbeans para programar
buena elección ;). Yo netbeans no lo he llegado a usar con C++, lo he usado un poco en Java, aunque prefiero eclipse
Ahora estoy probando en otro programa a usar la calse numero creada anteriormente,pero me dice "numero was note declared in this scope",que le falta o que le sobra para poder usar la clase numero??

#include <stdlib.h>
#include <conio.h>
#include <iostream>

void mostrar(numero num);

using namespace std;

int main(int argc, char** argv){
    numero m;
    m=new numero(6);
    mostrar(m);
    getch();
}
void mostrar(numero num){
    cout<<num->getN()<<endl;
    getch;
}
zaius5 escribió:Ahora estoy probando en otro programa a usar la calse numero creada anteriormente,pero me dice "numero was note declared in this scope",que le falta o que le sobra para poder usar la clase numero??

#include <stdlib.h>
#include <conio.h>
#include <iostream>

void mostrar(numero num);

using namespace std;

int main(int argc, char** argv){
    numero m;
    m=new numero(6);
    mostrar(m);
    getch();
}
void mostrar(numero num){
    cout<<num->getN()<<endl;
    getch;
}


La clase numero no está declarada en ninguna parte, tendrás que añadir un #include "numero.h".
Ahora me dice,invalid conversion from numero* to int en mostrar(m),no se que pasa si la funcion mostrar recibe un objeto de tipo numero y eso es lo que le paso ,no tengo ni idea.
#include <stdlib.h>
#include <conio.h>
#include <iostream>
#include "numero.h"

void mostrar(numero num);

using namespace std;

int main(int argc, char** argv){
    numero* m;
    m=new numero(6);
    mostrar(m);//el error es aqui
    getch();
}
void mostrar(numero num){
    cout<<num->getN()<<endl;
    getch;
}
Estás aprendiendo el lenguaje con información obsoleta, te aconsejo este libro: Accelerated C++, y para profundizar la serie Effective C++ de Scott Meyers. C++ ha cambiado muchísimo en 20 años y por ponerte un ejemplo, ya el new y el delete ni se usan salvo para microoptimizaciones rarísimas.
10 respuestas