Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/12/2014, à 12:10

TimChev

[Résolu] C++, Qt : size_t does not name a type

Bonjour,

Je développe sous Ubuntu 14.04 avec Qt5.3.1 et Qt Creator 3.1.2.
J'ai un simple projet avec un main et 1 classe.

J'ai des soucis au niveau de la compilation. J'ai une centaine d'erreurs du type : “size_t does not name a type”, “int32_t” has not been declared” ou “__gnuc_va_list has not been declared”.

Voilà mon .pro :

QT += core widgets network
CONFIG = c+11
DEFINES += NOMINMAX
HEADERS += \ IvyBus.h
SOURCES += \ main.cpp \ IvyBus.cpp

unix:!macx: LIBS += -lIvy

INCLUDEPATH += /usr/include
DEPENDPATH += /usr/include

Ivy est un bus de communication qui permet la transmission de messages texte entre applications.
J'ai déjà pas mal cherché sur le net, j'ai trouvé des solutions qui proposent d'inclure des librairies telles que stdlib ou stdarg, mais ça ne change rien à mon problème.

Est-ce que quelqu'un a déjà eu un problème de ce genre, ou une idée qui pourrait m'aider à le résoudre ?

Merci beaucoup.

Dernière modification par TimChev (Le 16/12/2014, à 14:50)

Hors ligne

#2 Le 04/12/2014, à 16:14

claudius01

Re : [Résolu] C++, Qt : size_t does not name a type

1) S'agissant de "size_t does not name a type", cela ressemble à une double définition de "size_t" comme décrit dans le fil de discussion size_t can not be found by g++-4.1 or others on Ubuntu 8.1

Pour en être sûr, il faut chercher dans tous les fichiers include du projet localisés par INCLUDEPATH si tel est le cas (en espérant une absence de définition dans un autre fichier ;-)...

2) Pour int32_t has not been declared, c'est clair
=> Non défini et même stratégie: il faut chercher dans tous les fichiers include du projet ... si tel est le cas

3) Pour __gnuc_va_list has not been declared
=> idem que pour int32_t has not been declared
=> Pour info sur mon Ubuntu 12.04 __gnuc_va_list est trouvé dans les fichiers suivants:

$ find /usr/include -name "*.h" -exec grep -l __gnuc_va_list {} \;

/usr/include/_G_config.h
/usr/include/x86_64-linux-gnu/bits/syslog.h
/usr/include/x86_64-linux-gnu/bits/wchar2.h
/usr/include/x86_64-linux-gnu/sys/syslog.h
/usr/include/wchar.h
/usr/include/sys/syslog.h
/usr/include/libio.h
/usr/include/err.h

Dernière modification par claudius01 (Le 04/12/2014, à 16:30)

Hors ligne

#3 Le 04/12/2014, à 17:42

TimChev

Re : [Résolu] C++, Qt : size_t does not name a type

Merci de ton retour.
Je n'ai mis que quelques exemples d'erreur parmi ceux que j'ai, pour montrer que j'en ai énormément (1152 pour être précis).
Je ne pense vraiment pas qu'il faille traiter les erreurs une par une. Pour moi ça serait plus un problème de paquet ou de plugin à installer/désinstaller. Ou encore un problème au niveau de la lib Ivy, mais vu comment elle est populaire, si c'est ça, je pense que je vais devoir me débrouiller tout seul ! hmm

Le lien que tu m'as donné date de 5 ans et parle de versions différentes de Ubuntu et du compilateur. De plus, il ne semble concerné que par une des erreurs que j'ai, et je pense vraiment qu'elles sont toutes liées chez moi...

Dernière modification par TimChev (Le 04/12/2014, à 17:43)

Hors ligne

#4 Le 04/12/2014, à 18:10

claudius01

Re : [Résolu] C++, Qt : size_t does not name a type

TimChev a écrit :

Merci de ton retour...
Je n'ai mis que quelques exemples d'erreur parmi ceux que j'ai, pour montrer que j'en ai énormément (1152 pour être précis).

Effectivement, si un aussi grand nombre d'erreurs (en espérant qu'elles ne sont pas toutes différentes), il y a un gros problème de cohérence entre les différents modules du build voire de l'environnement de build lui-même.

Sur le principe, je suis d'accord sur le fait de ne pas traiter dans ce cas ces erreurs une par une mais que faire d'autre quand on est seul au monde (tout dépend de l'énergie qu'il est possible de dépenser pour en sortir ;-)

Désolé, nous étions 2 sur ton problème, je crains que tu ne sois de nouveau seul ;-(

Hors ligne

#5 Le 05/12/2014, à 21:00

no_spleen

Re : [Résolu] C++, Qt : size_t does not name a type

Bonjour,

Peux-tu poster ton code pour que nous puissions essayer de le compiler de notre côté ?

Hors ligne

#6 Le 08/12/2014, à 10:34

TimChev

Re : [Résolu] C++, Qt : size_t does not name a type

Bonjour,

Notez qu'il est nécessaire d'installer la librairie Ivy sur votre machine pour compiler (IvyC et IvyC++ Unix). Vous pouvez le lien vers le svn ici : http://www.eei.cena.fr/products/ivy/dow … kouts.html

Et voici mon code source :

IvyBus.cpp :

#include "IvyBus.h"

#include <QMapIterator>
#include <QApplication>
#include <QSettings>

#include <Ivy/IvyApplication.h>

IvyBus::IvyBus(QObject *parent)
    : QObject(parent)
    , m_ivy(new Ivy(Q_NULLPTR, Q_NULLPTR, this, false))
{
    connect(this, &IvyBus::dieMessageReceived, this, &IvyBus::stop);

    m_ivy->BindDirectMsg(this);
    m_ivy->SetBindCallback(this);
    //m_ivy->SetDieCallback(this);
    m_ivy->BindMsg("^Hello(.*)", this);
    m_ivy->BindMsg("^Bye$", this);
}

IvyBus::IvyBus(const QString &name, QObject *parent)
    : QObject(parent)
    , m_ivy(new Ivy(name.toLocal8Bit().data(),
                    QString("%1 READY").arg(name)
                                       .toLocal8Bit()
                                       .data(),
                    this,
                    false))
{
    connect(this, &IvyBus::dieMessageReceived, this, &IvyBus::stop);

    m_ivy->BindDirectMsg(this);
    m_ivy->SetBindCallback(this);
//    m_ivy->SetDieCallback(this);

    m_ivy->BindMsg("^Hello(.*)", this);
    m_ivy->BindMsg("^Bye$", this);
}

IvyBus::~IvyBus()
{
    m_ivy->stop();
    delete m_ivy;
}

bool IvyBus::start(const QString &domain)
{
    m_ivy->start(domain.toLocal8Bit().data());
    return true;
}

bool IvyBus::start(const QHostAddress &addr, quint16 port)
{
    return start(addr.toString() +
                 QStringLiteral(":") +
                 QString::number(port));
}

void IvyBus::stop()
{
    m_ivy->SendMsg("Bye");
    m_ivy->stop();
}

void IvyBus::bindMessage(const QString &expression)
{
    m_ivy->BindMsg(expression.toLocal8Bit().data(), this);
}

void IvyBus::sendMessage(const QString &message)
{
    if (!message.isNull() && !message.isEmpty())
        m_ivy->SendMsg(message.toLocal8Bit().data());
}

bool IvyBus::OnDie(IvyApplication *app, int id, const char *arg)
{
    Q_UNUSED(app) Q_UNUSED(id)

    QByteArray message(arg);
    if (message.isNull() || message.isEmpty())
        return false;

    emit dieMessageReceived(QString(message));
    return true;
}

void IvyBus::OnDirectMessage(IvyApplication *app, int id, const char *arg)
{
    Q_UNUSED(app) Q_UNUSED(id)

    QByteArray message(arg);
    if (message.isNull() || message.isEmpty())
        return;

    emit directMessageReceived(QString(message));
}

void IvyBus::OnMessage(IvyApplication *app, int argc, const char **argv)
{
    Q_UNUSED(app)

    QByteArray message((argc < 1) ? "" : argv[0]);
    if (message.isNull() || message.isEmpty())
        return;

    emit messageReceived(QString(message));
}

IvyBus.h :

#ifndef IVYBUS_H
#define IVYBUS_H

#include <Ivy/Ivycpp.h>
#include <Ivy/IvyCallback.h>

#include <QHostAddress>
#include <QMap>
#include <QObject>

class IvyBus : public QObject, public IvyApplicationNullCallback
                             , public IvyBindingNullCallback
                             , public IvyDieCallback
                             , public IvyDirectMessageCallback
                             , public IvyMessageCallback
{
    Q_OBJECT

public:
    explicit IvyBus(QObject *parent = Q_NULLPTR);
    IvyBus(const QString &name, QObject *parent = Q_NULLPTR);
    ~IvyBus();

Q_SIGNALS:
    void dieMessageReceived(const QString &message);
    void directMessageReceived(const QString &message);
    void messageReceived(const QString &message);

public Q_SLOTS:
    bool start(const QString &domain);
    bool start(const QHostAddress &addr, quint16 port);
    void stop();

    void bindMessage(const QString &expression);
    void sendMessage(const QString &message);

private:
    bool OnDie(IvyApplication *app, int id, const char *arg);
    void OnDirectMessage(IvyApplication *app, int id, const char *arg);
    void OnMessage(IvyApplication *app, int argc, const char **argv);

private:
    Ivy *m_ivy;
    Q_DISABLE_COPY(IvyBus)
};

#endif // IVYBUS_H

Et le main :

#include <QApplication>
#include "IvyBus.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    IvyBus bus(QStringLiteral("ivy_test"));
    bus.start(QHostAddress::Broadcast, 2010);

    return app.exec();
}

Hors ligne

#7 Le 16/12/2014, à 14:49

TimChev

Re : [Résolu] C++, Qt : size_t does not name a type

Bon, je m'en suis sorti en incluant stdio.h et sys/types.h. (Bonjour la perte de temps !)

Hors ligne