Articles Taggés ‘C++’

C++: Les signaux facile

20 novembre 2009

class signals

La programmation peut-être très très souvent adapté à la vie réelle.
Et ici, encore une fois, je vais pouvoir sortir un exemple de la vie courante, pour aider à mieux comprendre le principe des signaux.

Mais globalement, les signaux permettent d’émettre des messages vers une méthode (d’une classe ou non) pour signaler quelque chose, donc, travailler avec des évènements, au travers des boost::signal<> et sigc::signal<> ! :)

» En lire plus:C++: Les signaux facile

Oracle: OCIPClearMxCtr libclntsh.so = Segmentation Fault

10 novembre 2009

Database CMYK 128x128

Je vient de tomber sur un problème assez casse burnes… et j’ai trouvé la solution !
Donc je partage !! :D

Comme vous le savez peut-être déjà, je travail sur Elcaro.
Mon objet qui utilise OCCI d’Oracle n’arrêtait pas de me faire un segmentation fault (erreur de segmentation) lorsque j’essayais de faire un oracle::occi::Environment::createEnvironment().

J’ai lancé le déboguer qui m’as sortis ceci:

#0 0x00007ffff164b77a in OCIPClearMxCtr () from /usr/lib/libclntsh.so.11.1
#1 0x00007ffff2d1c636 in oracle::occi::OCCIErrorGet(void*, unsigned int, unsigned char*, int*, unsigned char*, unsigned int, unsigned int) () from /usr/lib/libocci.so.11.1
#2 0x00007ffff2d115b1 in _ZN6oracle4occi16SQLExceptionImplC9EPvS2_i () from /usr/lib/libocci.so.11.1
#3 0x00007ffff2d1154e in oracle::occi::SQLExceptionImpl::SQLExceptionImpl(void*, void*, int) () from /usr/lib/libocci.so.11.1
#4 0x00007ffff2d12c29 in oracle::occi::SQLExceptionCreate(void*, int) () from /usr/lib/libocci.so.11.1
#5 0x00007ffff2d12e9c in oracle::occi::Environment::createEnvironment(oracle::occi::Environment::Mode, void*, void* (*)(void*, unsigned long), void* (*)(void*, void*, unsigned long), void (*)(void*, void*)) ()
from /usr/lib/libocci.so.11.1

Donc, la bibliothèque d’Oracle libclntsh.so.11.1 n’arrive pas à créer l’environnement, et pire que ca, elle crash complètement ! ( Merci Oracle encore une fois … >:| )

» En lire plus:Oracle: OCIPClearMxCtr libclntsh.so = Segmentation Fault

C++: Gtk::TreeView facile avec GTKmm

9 novembre 2009

gtkmm_treeview_example

Je vais essayer d’expliquer dans cette article comment utiliser les Gtk::TreeView avec GTKmm de manière simple ! :)
Dans un premier temps, nous allons créer une liste simple, puis nous ajouterons, comme dans la capture au dessus, une image.

Comme à mon habitude, nous allons utiliser Glade pour dessiner l’interface graphique et créer une classe dérivé de notre fichier glade, grâce à GTKmm.
( Voire mon article précédent pour voire en détails les classes dérivé de fichiers glade )

» En lire plus:C++: Gtk::TreeView facile avec GTKmm

C++: pkg-config pour vos bibliothèques !

10 août 2009

C’est quoi pkg-config ?

Ce programme (Linux, mais dispo pour Windows et Mac), permet de simplifier la compilation d’application, utilisant des bibliothèques partagé sur le système.

En gros, vous lui donnez le nom de la bibliothèque visé, et il peut vous retourner le opérateurs de compilation, et les Includes path.

» En lire plus:C++: pkg-config pour vos bibliothèques !

C++: Les fonctions « inline »

29 juillet 2009

Le mot clé inline, qui se place devant la déclaration d’une fonction dans la déclaration de la classe ( dans un fichier header .h en règles générales ), permet d’optimiser le code, d’accélérer le fonctionnement de la classe.

La particularité est qu’il ne peux être utilisé que si la méthode, déclaré avec ce dernier, ne modifie pas la valeur d’un attribue de la classe.

En clair, les getters !

Donc, il est bon de déclarer tout les get…() avec inline, si il n’y a pas de changement de valeurs :

[sourcecode language="cpp"]
class A
{
private:
int size;
int height;
int width;

public:
A();
~A();

void setSize( int size );
void setHeight( int height );
void setWidth( int with );

int inline getSize() const
{
return this->size;
}

int inline getHeight() const
{
return this->height;
}

int inline getWidth() const
{
return this->width;
}
};
[/sourcecode]

Le C/C++ c’est bon ! Mangez-en !!

C++: Destructeurs virutels

29 juillet 2009

Petit billet rapide à propos des destructeurs virtuels de classes.

Qu’est ce qu’un destructeur virtuel de classe ?

C’est un simple destructeur de classe déclaré avec le mot clé virtual devant.

Comme ceci:

[sourcecode language="cpp"]
class A
{
public:
virtual ~A();
};
[/sourcecode]

Quand utiliser un destructeur virtuel ?

Les destructeurs virtuels seront indispensable lorsque vous ferez de l’héritage, mais ils seront à éviter à tous prix sans héritage !

Avec héritage

Si vous déclarez une classe B qui sera hérité par A, il vous faudra placer le mot clé virtual afin que lorsque la classe A soit détruite, la classe B le soit de même.

Si vous ne le faites pas, vous risquez des fuites de mémoire. Ce qui n’est pas terrible :-P

Sans héritage

Si vous placer virtual devant tout vos destructeurs sans faire d’héritage, l’impacte ne sera pas énorme, mais vous aller alourdir vos classes à la compilation … pour rien !

En effet, le compilateur ajoute des informations de compilation à votre classe à cause de virtual, qui ne servent à rien sans héritage.

Conclusion:

Détruisions OUI, mais détruisons intelligemment ! ;-)

C++: Créer des logs

11 juillet 2009

Introduction

Dans tout les languages de programmation, quand quelque chose ne vas pas, et que l’on doit se taper la maintenance… les fichiers de logs sont les bienvenu !

Même si, en tant que développeur indépendant, qui programme pour le plaisir, ca ne semble pas important… c’est si simple de prendre le pli, et d’être tranquille pour plus tard !

( Imaginez que votre petit programme sans intérêt, devient intéressant pour d’autre, que vous le publiez, et que vous avez un rapport de bug )

» En lire plus:C++: Créer des logs

Makefile: Compilation avec sous dossiers !

6 juin 2009

gnome-stock-runQuand un projet prend un peu d’importance, et surtout, pour peu que vous soyez un poile organisé, vous aller vouloir séparer des parties de codes dans des sous dossiers.
Par exemple, les classes des tests unitaires puisque je suis en plein dedans en ce moment, c’est plus propre dans un sous-dossier, et surtout, vue que j’utilise cccc, ca permet d’avoir les statistiques du projet, vraiment, et ne pas avoir celles des tests unitaires en plus.

Donc, si je créer un dossier unit_test/ dans mon dossier trunk/ ( Oui ont utilise un système de versioning quand même !! :D ), et que je lance mon make… ça va péter à coup sûr !

L’astuce est vraiment simple ! Faites moi confiance ! ;)

» En lire plus:Makefile: Compilation avec sous dossiers !

Tests Unitaires en C++ avec CppUnit

29 mai 2009

Maintenant que j’ai terminé de coder ma librairie XTM, pour mon programme TuXtremSplit, je veux intégrer des tests unitaires !

C’est quoi des Tests Unitaires ??

Les Tests unitaires existent pour faciliter la vie des développeurs.
Le principe est d’écrire un jeu de tests pour chaque classe, puis d’utiliser un Continuous Integration server, comme Hudson ! :)
Ce dernier, selon sa configuration, va compiler votre code, puis exécuter les tests unitaires, pour enfin générer un rapport.

Concrètement, si quelqu’un commit un code qui provoque un bug, car il a mal appelé votre classe par exemple, Hudson râlera, et tout le monde en sera informé.
Du coup, vous pourrez découvrir rapidement des bugs, mais, à contre partie, les tests unitaires ralentissent le build.
D’où l’intérêt des night build si vous travaillez sur un gros projet, où le code sera compilé à minuit par exemple, pendant le temps où personne ne travaille.

» En lire plus:Tests Unitaires en C++ avec CppUnit

Continuous Integration en C++ avec Hudson

4 mai 2009

hudson logo

Continuous quoi ?

Ça permet d’améliorer la qualité d’un programme.
Les développeurs vont écrire des tests unitaires, qui seront exécutés après la compilation afin de prévoir des dysfonctionnements dût aux changements commités dans le repository (Subversion par exemple).

Voire aussi: Wikipedia

» En lire plus:Continuous Integration en C++ avec Hudson