preguntas varias sobre kdevelop

Imagen de ndante

Forums: 

Usando Kdevelop ( a ver si me se explicar y entender la respuesta :D ):
¿Se pueden declarar estructuras comunes para varias clases? ¿Como?

Lo que quiero es crear 'algo' a lo que varias clases puedan apuntar y no me de el error:

/home/Documentos/C++/prueba/src/constantes.h:4: error: redefinition of ‘struct Tara’
/home/Documentos/C++/prueba/src/constantes.h:5: error: previous definition of ‘struct Tara’
***Terminado con estado 2***

P.D.: Me da un poco de verguenza ( muy poca ) tener tan 'colapsado este sub-foro. ¡¡Pero no es culpa mia por necesitar tanta ayuda!!. Tened en cuenta que sois mis 'profesores' y he empesado de casi de cero y un poco tarde :D ( en verdad os soy un poco infiel con algún que otro foro más, pero poco eh! :D )

THX THX

Extencion a la pregunta anterior (q sigue sin solucion)

Imagen de ndante

Con el debugger de kdevelop, usando la funcion paso a paso, me termina el programa instantaneamente cuando llega a la instruccion : initscr (); Si coloco un Punto de interrupcion justo despues, nunca llega a detenerce. Y GDB me informa de que 'exited normaly', cuando corro el programa de manera normal, no tengo el problema, pero en el debugger siempre. ¿Alguna pista?

P.D. las instrucciones del kdevelop, dejan mucho que decear.

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]

por favooooor....

Imagen de ndante

¿Por que no funciona correctamente el debugger de mi kdevelop? (No se para en ningun punto de interrupcion) ¿alguna idea?

Sobre este programa existe muy poca informacion, ayudadme por favor.

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]

Sin ningun problema...

Imagen de ndante

Este es el proyecto de muestra "Programa < Hola Mundo > sencillo en ncurses", y sirve perfectamente para lo que pregunto:

#ifdef HAVE_CONFIG_H
#include
#endif

#include

void create_box(int y, int x, int w, int h)
{
mvaddch(y, x, '+');
mvaddch(y, x + w, '+');
mvaddch(y + h, x, '+');
mvaddch(y + h, x + w, '+');
mvhline(y, x + 1, '-', w - 1);
mvhline(y + h, x + 1, '-', w - 1);
mvvline(y + 1, x, '|', h - 1);
mvvline(y + 1, x + w, '|', h - 1);
}

int main()
{
@ int startx, starty, height, width;

initscr();
@ start_color();
cbreak();
keypad(stdscr, TRUE);
noecho();

init_pair(1, COLOR_BLACK, COLOR_CYAN);

height = 2;
width = 30;
starty = (LINES - height)/2;
startx = (COLS - width)/2;

attron(COLOR_PAIR(1));

create_box(starty, startx, width, height);
mvprintw(starty, startx + 3, " Hello World! " );
mvprintw(starty+1,startx+1," Type any char to exit ");
mvprintw(0,0,"");
refresh();
getch();

endwin();
return 0;
}

Las arrobas son los puntos de interrupcion.

El problema:

· Cuando pongo a funcionar el debugger (F9), este se para en la linea "initscr();". Esto es normal, puesto que esta realizando el primer punto de interrupcion.
Cuando le doy a continuar, devería parar en la siguiente linea que tiene un punto de interrupcion, pero no es así, el programa me da "exited normally" y se para. ¿?¿?¿?¿?¿?¿?¿?¿?
· Si ejecuto el debugger paso a paso tengo el mismo problema, en cuanto llega a la linea en cuestion... se para.

Si sirve de ayuda decir que tengo instalado kdevelop con apt-get, cuando intento intalarlo con las fuentes, me pide berkeley db >= 4.1 (o algo así). Este paquete lo tengo instalado (en tehoria el 4.4.5). ¿?

P.D.: Para simular lo que busco en el kdevelop, tengo que usar: Kate, g++ y ddd :D Aunque si he de ser sincero prefiero el debugger del ddd antes que el de kdevelop, pero es sólo una opinion (tened en cuenta la de problemas que me esta dando este ultimo)
P.P.D.: Anjuta y eclipse me han dado muchos más problemas, cuelgues, parones y extrañas perdidas de datos.

THX THX POR CONTESTAR

Añado otra pregunta (Para no colapsar tanto el foro ;) ), ¿cual es la instruccion mas sencilla para emitir un sonido con C++? Un sonido modulable minimamente se entiende, por lo menos la nota. (Si no se necesita mas que la libreria iostream.h, ncurses.h o ninguna mejor que mejor)

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]

Sobre la ultima pregunta...

Imagen de ndante

¿Y que se puedan hacer un minimo de dos sonidos simultaneos?

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]

Depurar (debug) programa ncurses en kdevelop

Imagen de acl

He usado el proyecto de ejemplo de ncurses y vi que al depurar terminaba cuando entras a la funcion initscr(). El error que da (si aplastas el visor de application en la barte inferior de la ventana) es "Error opening terminal: unknown".

Primero busque en google por algo que se le parezca y encontre estos reportes de bug de kdevelop. En uno de ellos (el segundo me parece) te manda al bugzilla de kde para una referencia a algo similar y ahi hablan acerca de tener la variable TERM asignada el valor xterm. Al arrancar kdevelop de distintas formas vi que el ambiente en el que corre kdevelop es apenas distinto dependiendo del metodo: si lo arrancas desde shell, kdevelop tiene la variable TERM=xterm y si lo arrancas de menues, no la tiene. Puedes ver las variables de ambiente en las propiedades del proyecto bajo el panel de "Run". Ahi hay un boton de "Environment". Lo que hice fue agregar manualmente la variable TERM al ambiente del proyecto (Boton Add/Copy, Name: TERM Value:xterm) y ahi pude pasar de initscr(). Esto tiene algo de sentido porque ncurses necesita una terminal para poder ejecutarse y usa esa variable como indicador de estar en una terminal. Cuando arrancas kdevelop por menues, no estas en una terminal... Posiblemente tengas que detener cualquier instancia de depuracion que haya quedado sin terminar (aplasta el boton de stop en la barra de herramientas o Build->Stop o Escape) para que te tome el nuevo ambiente (o rearranca kdevelop).

Luego, para poder tener una ventana de terminal aparte, seleccioné la opcion de "Enable separate terminal for application IO" dentro del panel de Debugger en la opciones del proyecto.

Y ahi puedo depurar paso a paso la aplicacion de ejemplo, y en una ventana aparte. Asi que no es tanto una cuestion de kdevelop sino que necesitas que las bibliotecas de ncurses vean que si estan en una terminal. Es una cuestion de saber usar ncurses (y ahora ya aprendimos tambien nosotros)

Viste? Linux es muy amigable, lo unico que pasa es que escoge bien a sus amigos ;)

Tiene usted toda la razon

Imagen de ndante

Cierto, si lo abres desde consola funciona perfectamente.

Muchisimas gracias ( acl is the best :D )

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]

Nada, no me convence...

Imagen de ndante

No me convence de kdevelop que:

Cada vez que me equivoque y cree una clase que no quiero, tenga que cambiar miles de archivos.
Que cambiar el nombre del proyecto, sea una odisea.
Que con cada nuevo proyecto tenga que borrar el ejemplo de prueba.
Que sea tan dificil introducir datos al programa mientras esta en modo debugger
Que resulte, en definitiva tan facil probocarle un error.

Que estoy usando

Como editor de texto kate, ya que me permite usar lenguetas y una consola incorporada.
Como compilador 'g++ -lncurses -g -march=athlon64 -Wno-deprecated -o ~/aa.x'
Como debugger ddd
Para unirlo todo, ejecutandose en la consola de kate:

#!/bin/bash
Programa="CEC++"
Version=1.2.034
Autor="nDante"

clear

while [ "$respuesta" != "q" ];
do
echo -e "\t\t$Programa-$Version\t\t\t$Autor\n\n"
echo -e "\tCompilar (c)\n\tEjecutar (x)\n\tDDD (d)\n\tSalir (q)"

read -s -n 1 respuesta

if [ "$respuesta" = "c" ];
then
clear && g++ -lncurses -g -march=athlon64 -Wno-deprecated -o ~/aa.x $1 && echo "Compilado OK"
elif [ "$respuesta" = "x" ];
then
clear && chmod u+x ~/aa.x && xterm -e '~/aa.x'
elif [ "$respuesta" = "d" ];
then
ddd ~/aa.x && clear
fi
done


De todas formas, muchas gracias por vuestras respuestas. Y a acl por sus contribuciones :D

P.D. No, no uso 'case'. No se porque, pero le tengo 'mania'. prefiero poner los 'if' completos aunque se tarde más. me parece que todo queda más 'claro'

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]