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 #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 #include "faucetcore.h"
void testDebug() { cout << "Test Debug"; peerlist << "test"; }
faucetcore.h #ifndef FAUCETCORE #define FAUCETCORE #include <iostream> #include <QList> #include <QString> using namespace std; QList < QString > peerlist; void testDebug(); #endif
websocketserver.cpp
#include "websocketserver.h" #include "QtWebSockets/qwebsocketserver.h" #include "QtWebSockets/qwebsocket.h" #include <QtCore/QDebug> #include "faucetcore.h"
QT_USE_NAMESPACE
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 ); } }
EchoServer::~EchoServer() { m_pWebSocketServer->close(); qDeleteAll( m_clients.begin(), m_clients.end() ); }
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; testDebug(); }
void EchoServer::processTextMessage( QString message ) { QWebSocket * pClient = qobject_cast < QWebSocket *>( sender() ); if( pClient ) { pClient->sendTextMessage( message + " echo server" ); } qDebug() << pClient->peerAddress(); Q_FOREACH( QWebSocket * pClient, m_clients ) { if( pClient ) { } } }
void EchoServer::processBinaryMessage( QByteArray message ) { QWebSocket * pClient = qobject_cast < QWebSocket *>( sender() ); if( pClient ) { pClient->sendBinaryMessage( message ); } }
void EchoServer::socketDisconnected() { QWebSocket * pClient = qobject_cast < QWebSocket *>( sender() ); if( pClient ) { m_clients.removeAll( pClient ); pClient->deleteLater(); } }
websocketserver.h #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
|
|
turaz |
» 2015-04-19 21:29:41 z każdym #include "faucetcore.h" inicjalizujesz peerlist, dlatego ten błąd ;) |
|
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. |
|
turaz |
» 2015-04-20 06:47:25 Poczytaj o wzorcu projektowym: Singleton. |
|
NopeDotAvi |
» 2015-04-20 06:48:19 Singleton to raczej anty-wzorzec. |
|
alien1983 Temat założony przez niniejszego użytkownika |
» 2015-04-20 15:43:20 No to jak stworzyć "QList < QString > peerlist" globalnie ? |
|
alien1983 Temat założony przez niniejszego użytkownika |
» 2015-04-20 19:48:20 odp. extern QList<QString> peerlist ; |
|
« 1 » |