Problemas al pasar un archivo .c a .cpp

Hola. Soy nuevo en este foro aunque llevo bastante tiempo leyendo todo lo que sabeis sobre la programacion para DS.

Espero que alguien me pueda hechar una mano para que pueda seguir con mi proyecto.

El caso es que he empezado diseñando una introduccion y un menu, todo eso siguiendo los ejemplos de la carpeta palibExamples.

Tambien tuve que hacer algunas funciones y bucles (lo normal en cualquier proyecto).

Ahora, por exigencias del proyecto necesito crearme clases y hacer objetos dinamicos, por lo que he tenido que hacer un .h.

He leido en los foros que para poder compliar un .h hay que tener un .cpp.

Mi problema es que el .c que tenia antes funcionaba perfectamente pero cuando lo he renombrado a .cpp me dan los siguientes errores:

c:/devkitPro/Trabajos/BB/source/habilidades.h:12:14: warning: no newline at end of file
In file included from c:/devkitPro/Trabajos/BB/source/main.cpp:8:
c:/devkitPro/Trabajos/BB/source/personaje.h:24:7: warning: no newline at end of file
c:/devkitPro/PAlib//include/nds/arm9/PA_Sound.h: In function 'void PA_PlayFSSoundEx2(u8, u16, u8, int, s16, BOOL, int)':
c:/devkitPro/PAlib//include/nds/arm9/PA_Sound.h:212: error: invalid conversion from 'void*' to 'u32*'
c:/devkitPro/PAlib//include/nds/arm9/PA_Sound.h: In function 'void PA_PlayFSMod(u16)':
c:/devkitPro/PAlib//include/nds/arm9/PA_Sound.h:430: error: invalid conversion from 'void*' to 'u32*'
c:/devkitPro/Trabajos/BB/source/personaje.h: At global scope:
c:/devkitPro/Trabajos/BB/source/personaje.h:22: error: abstract declarator '<anonymous class>' used as declaration
c:/devkitPro/Trabajos/BB/source/main.cpp: In function 'void Test()':
c:/devkitPro/Trabajos/BB/source/main.cpp:85: error: a function-definition is not allowed here before '{' token
c:/devkitPro/Trabajos/BB/source/main.cpp:276: error: 'Test4' was not declared in this scope
c:/devkitPro/Trabajos/BB/source/main.cpp: In function 'void Test2()':
c:/devkitPro/Trabajos/BB/source/main.cpp:301: error: a function-definition is not allowed here before '{' token
c:/devkitPro/Trabajos/BB/source/main.cpp:325: error: 'menu' was not declared in this scope
c:/devkitPro/Trabajos/BB/source/main.cpp: At global scope:
c:/devkitPro/Trabajos/BB/source/main.cpp:434: error: expected `}' at end of input

Algunos de los errores tienen que ver con el sonido, y no entiendo porque ya que cuando tenia el .c no tenia ningun error.

Resulta que tambien me dice que no puedo declarar una funcion dentro de otra, cuando en el .c podia hacerlo perfectamente.

Os voy a poner ahora el codigo para que lo podais ver mejor.

Otro de los errores que no entiendo es porque me dice que he creado una clase abstracta sino me he declarado ningun metodo virtual puro.

Espero que alguien me pueda ayudar.

Gracias y saludos a todos.

Adjuntos

Es un problema de esa versión de palib. Es fácil de solucionar si estás habituado a c++, es un error común al incluir código de C. Aquí tienes una solución: http://forum.palib.info/index.php?topic=4620.0

Btw, en habilidades.h tienes un #endif ahí colgando... lo habitual en C++ sería hacer algo así

#ifndef _NOMBRECLASE
#define _NOMBRECLASE

...codigo...

#endif


Así el .h solo se incluirá una vez al compilar y no te dará error. Sino, al incluirlo desde varios sitios te puedes hacer un pequeño lío

En cuanto a los warnings, lee lo que te dice. "No newline at end of file". Se recomienda dejar una linea vacía al final de los archivos de texto. Pero tampoco te va a dar error por eso.
Gracias por contestar, pero sigo teniendo el problema de los errores con el sonido del estilo c:/devkitPro/PAlib//include/nds/arm9/PA_Sound.h: In function 'void PA_PlayFSSoundEx2(u8, u16, u8, int, s16, BOOL, int)':
c:/devkitPro/PAlib//include/nds/arm9/PA_Sound.h:212: error: invalid conversion from 'void*' to 'u32*'

Y otros como este c:/devkitPro/Trabajos/BB/source/personaje.h:22: error: abstract declarator '<anonymous class>' used as declaration
donde yo entiendo que me dice que estoy declarando una clase abstracta, cuando el codigo es el siguiente:

#ifndef personaje
#define personaje
#include "habilidades.h"

class personaje{


public:



private:

int movimiento;
int fuerza;
int agilidad;
int armadura;
int coste;
habilidades *contenedor;


};

#endif


Sigo sin poder declarar funciones dentro de funciones y solo me pasa cuando uso un .cpp.

Si alguien tiene alguna idea agradeceria una ayuda.

Saludos y gracias!
Sobre lo de los errores en las funciones de sonido... se soluciona como dicen en ese hilo, no hay más. Hazle caso a lo que dicen.

¿Puedes pegar el habilidades.h? Porque sale cortado o a saber.
Dejo aqui el codigo de habilidades.h por si no sale bien:

typedef enum {

placar, placajeDefensivo,
cabezaDura, carrera,
piesFirmes, manosSeguras,
agilidadFelina, atrapar,
golpeMortifero, cuernos,
pasar, furia,
esquivar, enPieDeUnSalto,
agallas, escurridizo,
regeneracion, saltar,
}habilidades;

Saludos!
4 respuestas