Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

qt c++ multiple definition of `peerlist'

Ostatnio zmodyfikowano 2015-04-20 19:48
Autor Wiadomość
alien1983
Temat założony przez niniejszego użytkownika
qt c++ multiple definition of `peerlist'
» 2015-04-19 21:07:13
testDebug() działa, natomiast jak dodam definicje "QList < QString > peerlist;" to mam błąd jak w temacie:/

main.cpp
C/C++
#include <QCoreApplication>
#include "websocketserver.h"
#include <iostream>
#include "faucetcore.h"

int main( int argc, char * argv[] )
{
    QCoreApplication a( argc, argv );
    EchoServer * server = new EchoServer( 1234 );
    QObject::connect( server, & EchoServer::closed, & a, & QCoreApplication::quit );
   
    return a.exec();
}

faucetcore.cpp
C/C++
#include "faucetcore.h"

void testDebug() {
    cout << "Test Debug";
    peerlist << "test";
}

faucetcore.h
C/C++
#ifndef FAUCETCORE
#define FAUCETCORE
#include <iostream>
#include <QList>
#include <QString>
using namespace std;
QList < QString > peerlist;
void testDebug();
#endif // FAUCETCORE

websocketserver.cpp
C/C++
/****************************************************************************
**
** Bit Coin Faucet Web Socket Server C++ QT
**
****************************************************************************/
#include "websocketserver.h"
#include "QtWebSockets/qwebsocketserver.h"
#include "QtWebSockets/qwebsocket.h"
#include <QtCore/QDebug>
#include "faucetcore.h"


QT_USE_NAMESPACE

//! [constructor]
EchoServer::EchoServer( quint16 port, QObject * parent )
    : QObject( parent )
     , m_pWebSocketServer( new QWebSocketServer( QStringLiteral( "Echo Server" ), QWebSocketServer::NonSecureMode, this ) )
     , m_clients()
{
    if( m_pWebSocketServer->listen( QHostAddress::Any, port ) ) {
        qDebug() << "Echoserver listening on port" << port;
        connect( m_pWebSocketServer, & QWebSocketServer::newConnection,
        this, & EchoServer::onNewConnection );
        connect( m_pWebSocketServer, & QWebSocketServer::closed, this, & EchoServer::closed );
    }
}
//! [constructor]

EchoServer::~EchoServer()
{
    m_pWebSocketServer->close();
    qDeleteAll( m_clients.begin(), m_clients.end() );
}

//! [onNewConnection]
void EchoServer::onNewConnection()
{
    QWebSocket * pSocket = m_pWebSocketServer->nextPendingConnection();
   
    connect( pSocket, & QWebSocket::textMessageReceived, this, & EchoServer::processTextMessage );
    connect( pSocket, & QWebSocket::binaryMessageReceived, this, & EchoServer::processBinaryMessage );
    connect( pSocket, & QWebSocket::disconnected, this, & EchoServer::socketDisconnected );
   
    m_clients << pSocket;
    //peerlist.;
    //qDebug() << m_clients.count();//wyswietla ilosc klientow
    //qDebug() << m_clients.takeFirst();
    //qDebug() << pSocket->peerAddress();
    //qDebug() << m_clients;
    testDebug();
   
}
//! [onNewConnection]

//! [processTextMessage]
void EchoServer::processTextMessage( QString message )
{
    QWebSocket * pClient = qobject_cast < QWebSocket *>( sender() );
    if( pClient ) {
        //qDebug() << "Message: " << message;
        pClient->sendTextMessage( message + " echo server" );
    }
    //m_pWebSocketServer->close();
    qDebug() << pClient->peerAddress();
   
    //qDebug() << pClient->localAddress();
    //qDebug() << pClient->requestUrl();
    //qDebug() << pClient->;
    Q_FOREACH( QWebSocket * pClient, m_clients )
    {
        if( pClient ) //don't echo message back to sender
        {
            //qDebug() << pClient->peerPort() << endl;
            //QString q =  pClient->peerAddress().toString();
            //pClient->sendTextMessage(q);
            //qDebug() << q;
        }
    }
}
//! [processTextMessage]

//! [processBinaryMessage]
void EchoServer::processBinaryMessage( QByteArray message )
{
    QWebSocket * pClient = qobject_cast < QWebSocket *>( sender() );
    if( pClient ) {
        pClient->sendBinaryMessage( message );
    }
}
//! [processBinaryMessage]

//! [socketDisconnected]
void EchoServer::socketDisconnected()
{
    QWebSocket * pClient = qobject_cast < QWebSocket *>( sender() );
    if( pClient ) {
        m_clients.removeAll( pClient );
        pClient->deleteLater();
    }
}
//! [socketDisconnected]

websocketserver.h
C/C++
#ifndef WEBSOCKETSERVER_H
#define WEBSOCKETSERVER_H
#include <QtCore/QObject>
#include <QtCore/QList>
#include <QtCore/QByteArray>


QT_FORWARD_DECLARE_CLASS( QWebSocketServer )
QT_FORWARD_DECLARE_CLASS( QWebSocket )

class EchoServer
    : public QObject
{
    Q_OBJECT
public:
    explicit EchoServer( quint16 port, QObject * parent = Q_NULLPTR );
    ~EchoServer();
   
    Q_SIGNALS:
    void closed();
   
private Q_SLOTS:
    void onNewConnection();
    void processTextMessage( QString message );
    void processBinaryMessage( QByteArray message );
    void socketDisconnected();
   
private:
    QWebSocketServer * m_pWebSocketServer;
    QList < QWebSocket *> m_clients;
};

#endif //WEBSOCKETSERVER_H

P-131160
turaz
» 2015-04-19 21:29:41
z każdym
#include "faucetcore.h"
 inicjalizujesz peerlist, dlatego ten błąd ;)
P-131166
alien1983
Temat założony przez niniejszego użytkownika
» 2015-04-20 04:19:34
To jak mam ten problem rozwiązać aby w różnych plikach cpp mieć możliwość korzystania z tej samej klasy / funkcji (odwoływania, uruchamiania). Z funkcją testDebug() w(faucetcore.h) nie mam takiego problemu i działa mi "zaincludowana" w kilku plikach cpp jednocześnie przez co mogę z niej korzystać globalnie w całym projekcje.
P-131190
turaz
» 2015-04-20 06:47:25
Poczytaj o wzorcu projektowym: Singleton.
P-131192
NopeDotAvi
» 2015-04-20 06:48:19
Singleton to raczej anty-wzorzec.
P-131193
alien1983
Temat założony przez niniejszego użytkownika
» 2015-04-20 15:43:20
No to jak stworzyć "QList < QString > peerlist" globalnie ?
P-131199
alien1983
Temat założony przez niniejszego użytkownika
» 2015-04-20 19:48:20
odp.  extern QList<QString> peerlist ;
P-131222
« 1 »
  Strona 1 z 1