Archives par mot-clé : erreur

Qt: No matching function for call to connect

Publié dans C / C++ | Laisser un commentaire

Qt permet de relier facilement entre elle des classes héritant de QObject avec des liens signaux / slots. Voici un petit exemple de connexion.

class OtherQObject : public QObject
{
Q_OBJECT
public:
    OtherQObject();

signal:
    void aSuperSignal();
};
class MyQObject : public QObject
{
Q_OBJECT
public:
    MyQObject();

public slots:
    void myGreatMethod();
};
MyQObject *myClass;
OtherQObject *otherClass;
connect(otherClass, SIGNAL(aSuperSignal()), myClass, SLOT(myGreatMethod());

A de nombreuses reprises, il m’est arrivé d’être confronté à l’erreur suivante (ou similaire) : « No matching function for call to connect ». Plus précisément :

error: no matching function for call to ‘mainWindow::connect(MyQObject *&, const char [38], OtherQObject *&, const char [30])’
note: candidates are: static bool QObject::connect(const QObject*, const char*, const QObject*, const char*, Qt::ConnectionType)
note: bool QObject::connect(const QObject*, const char*, const char*, Qt::Connection

J’aimerai lister ici quelques causes possibles de ce type d’erreur. Un article sans fioriture, avec l’information brute de chez brute, mais qui sait, peut-être aurais-je un jour l’envi de peaufiner un petit peu ce bric à brac ?

Continuer la lecture

Javascript

Manipuler du JSON en PHP

Publié dans PHP | Un commentaire

Pour manipuler du JSON en PHP, il y a 2-3 petites choses à savoir. L’encodage, décodage c’est la première étape. Ensuite on peut s’amuser à gérer des cas bizarres et les erreurs. Et après… après on peut s’amuser avec des schémas si jamais l’envie nous prend.

Encodage / Décodage

Tout d’abord, les méthodes qui font l’essentiel du travail :

  • json_decode: transforme une chaîne de caractères JSON en variable PHP
  • json_encode: transforme une variable PHP en chaîne de caractères JSON

Cependant, il faut garder en tête que ces méthodes ne travaillent qu’avec de l’UTF-8. Allez savoir pourquoi alors que c’est plutôt l’inverse en PHP généralement… mais bref. Du coup, un petit coup de utf8_encode / utf8_decode avant d’utiliser json_decode sur autre chose que de l’UTF-8. Même topo pour json_encode.
La documentation PHP nous fournit quelques autres informations intéressantes, par exemple au sujet de la manière d’accéder à un objet contenant un trait d’union en PHP ($myObject->{'param-etre'}).
Continuer la lecture

c++ – Error: expected type-specifier before ‘ClassName’

Publié dans C / C++ | 2 commentaires

Une discussion intéressante à lire : c++ – Error: expected type-specifier before 'ClassName' – Stack Overflow quand la compilation C++ vous insulte avec un « expected type-specifier« .

Explication

Le compilateur ne trouve tout simplement pas le type que vous êtes en train d’utiliser… Dommage !

Solution

Une petite checklist fournie par cette discussion sur Stack Overflow :

  • You forgot to #include the header that defines it.
  • Your inclusion guards are defective.
  • Or, the compiler is thinking you meant one scope when really you meant another (For example, if you have NamespaceA::NamespaceB, AND a ::NamespaceB, if you are already within NamespaceA, it’ll look in NamespaceA::NamespaceB and not bother checking ::NamespaceB) unless you explicitly access it.

Soit en français :

  • Oublie du #include « MyClass.h » dans MyClass.cpp
  • Problème dans la « garde » du header. (c’était mon cas, j’avais copier/coller un .h et son .cpp, et j’avais oublié de modifier « #ifndef MYCLASS_H » dans le header…)
  • Un truc au sujet des namespaces que j’ai la flemme de lire 😀

Thunderbird, Minimize Tray – Bug à plusieurs fenêtres

Publié dans Geekeries | Laisser un commentaire

Ah. Bon. Un petit bug peut apparaître dans Thunderbird avec l’extension « Minimize Tray Revived ». Deux fenêtres de Thunderbird (ou plus) s’ouvrent au démarrage au lieu d’une seule, et il est impossible de fermer l’une des deux sans fermer l’autre…

La solution ? Désactiver temporairement « Minize Tray », relancer Thunderbird, fermer les fenêtres indésirables, réactiver « Minimize Tray », et redémarrer Thunderbird. That’s it!

Qt et l’héritage de QObjects

Publié dans C / C++ | Laisser un commentaire

Le modèle objet de Qt est basé sur les QObject, qui offrent notamment le système très utile de communication inter-classes via signal / slot. Gérer l’héritage avec cette architecture peut-être de prime-abord légèrement tricky ! J’ai notamment eu quelques soucis de connexion signal / slot avec des classes héritant d’une interface (classe virtual pure).

Mon architecture

Une interface IMyClass et deux classes l’implémentant MyClass et MyClassSimulation. J’ai en prime un patron « factory » pour faciliter l’instanciation de ces classes (et pour avoir plus de souplesse dans l’avenir) : MyClassFactory.

C++ inheritance and factory

C++ inheritance and factory pattern

Je connecte alors la méthode « slot » de mon instance de IMyClass (qui est soit MyClass, soit MyClassSimulation en ait) :

connect(otherClass, SIGNAL(aSuperSignal()), myClassInstance, SLOT(myGreatMethod());

L’erreur typique

QObject::connect: Cannot connect OtherClass::aSuperSignal() to (null)::myGreatMethod()

Continuer la lecture

Service Android et TabActivity

Publié dans Java | Laisser un commentaire

Lors de l’utilisation conjointe d’une TabActivity sur Android, et d’un service Android dans l’une ou l’autre des Activity, il faut faire attention à la manière dont on se connecte / déconnecte au(x) service(s) !
Il n’est pas rare d’obtenir une erreur du style :

WARN/ActivityManager(784): Binding with unknown activity: android.os.BinderProxy@6545646

La solution consiste à utiliser :

getApplicationContext().bindService(...);
// et 
getApplicationContext().unbindService(...);

plutôt que :

bindService(...);
// et 
unbindService(...);

Ce serait dû à un bug du SDK Android. Mais personnellement, cela me semble assez logique qu’il y ait à faire attention à qui (l’Activity parente, ou bien les Activity des onglets) « bind » et « unbind » les services puisque l’on a plusieurs Activity en même temps.

Personnellement, chez moi, ça rendait mes Activity quasiment inopérante : impossible de cliquer sur des boutons, d’accéder aux services, bref, la galère !

Plus d’informations

Symfony, Wamp 2.2 et l’extension PHP intl

Publié dans PHP | Un commentaire

Si vous obtenez des erreurs bizarres en utilisant PHP, notamment avec le framework Symfony, et plus particulièrement dans la gestion des formulaires, et d’autant plus si vous utilisez Wamp : c’est peut-être dû à l’extension intl.
Par exemple, une erreur 500 du type :

Catchable Fatal Error: Argument 1 passed to Symfony\Component\Form\Extension\Core\ChoiceList\MonthChoiceList::__construct() must be an instance of IntlDateFormatter, null given

Signifie peut-être que vous avez activé l’extension PHP intl ! Or, depuis PHP 5.3.0, cette extension est embarquée dans PHP. Auparavant il fallait installer / activer la version PECL de cette extension. Et visiblement, depuis Wamp 2.2, si on active la version PECL de php_intl, ça fait planter quelque chose… sûrement un doublon quelque part.
Conclusion : enlevez php_intl de votre fichier php.ini (ajoutez un point virgule devant cette ligne).

Problèmes de mémoire ?

Maven OutOfMemoryError

Publié dans Java | Laisser un commentaire

Maven Error

Maven failed during a build whit the following error:

The system is out of resources.
Consult the following stack trace for details.
java.lang.OutOfMemoryError: PermGen space

Solution

Add the environment variable MAVEN_OPTS: -Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m

Problèmes de mémoire ?

Maven OutOfMemoryError

Publié dans Java | Laisser un commentaire

Erreur Maven

Lors d’un build, Maven s’arrête en failure et s’explique par l’erreur suivante :

The system is out of resources.
Consult the following stack trace for details.
java.lang.OutOfMemoryError: PermGen space

Solution

Ajouter la variable d’environnement MAVEN_OPTS : -Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m

Erreur Android : « Debug certificate expired »

Publié dans Java | Laisser un commentaire

Lors de la compilation, si Android vous sort une erreur du style « Debug certificate expired » : ni une ni deux, allez voir votre SDK et supprimez le fichier debug.keystore situé dans le répertoire .android généralement placé dans votre répertoire utilisateur. En clair : ~/.android/debug.keystore (Linux et Mac OS X) %USERPROFILE%/.android/debug.keystore (Windows).

Une réponse longue et plus précise est lisible ici :

"Debug certificate expired" error in eclipse android plugins – Stack Overflow.