tengo esta fragmentos de código tomado de un ejemplo descargado:Conseguir un montón de errores cruces inicialización
bool ChatServer::event(QEvent * event)
{
if(event->type() == QEvent::User)
{
UserEvent * ue = static_cast<UserEvent *>(event);
switch(ue->userType)
{
case CR::ErrorEvent:
case CR::LogEvent:
{
TraceEvent * te = static_cast<TraceEvent *>(ue);
if(te->userType == CR::ErrorEvent)
{
error(te->msg);
}
else
{
log(te->msg);
}
}
break;
default:
return false;
}
}
else
{
return QTcpServer::event(event);
}
return true;
}
Ahora bien, si compilar el programa me sale este error:
g++ -c -pipe -O2 -Wall -W -DQT_NO_DEBUG -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/share/qt4/mkspecs/freebsd-g++ -I. -I/usr/local/include/qt4/QtCore -I/usr/local/include/qt4/QtNetwork -I/usr/local/include/qt4 -I. -I/usr/local/include/qt4 -I/usr/local/include -o chatserver.o chatserver.cpp
g++ -c -pipe -O2 -Wall -W -DQT_NO_DEBUG -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/share/qt4/mkspecs/freebsd-g++ -I. -I/usr/local/include/qt4/QtCore -I/usr/local/include/qt4/QtNetwork -I/usr/local/include/qt4 -I. -I/usr/local/include/qt4 -I/usr/local/include -o clientservice.o clientservice.cpp
clientservice.cpp: In member function 'virtual bool ClientService::event(QEvent*)':
clientservice.cpp:37: error: jump to case label
clientservice.cpp:34: error: crosses initialization of 'MessageEvent* me'
clientservice.cpp:41: error: jump to case label
clientservice.cpp:38: error: crosses initialization of 'UserInfoEvent* uie'
clientservice.cpp:34: error: crosses initialization of 'MessageEvent* me'
clientservice.cpp:44: error: jump to case label
clientservice.cpp:38: error: crosses initialization of 'UserInfoEvent* uie'
clientservice.cpp:34: error: crosses initialization of 'MessageEvent* me'
clientservice.cpp:31: warning: enumeration value 'EventTypeBegin' not handled in switch
clientservice.cpp:31: warning: enumeration value 'LogEvent' not handled in switch
clientservice.cpp:31: warning: enumeration value 'ErrorEvent' not handled in switch
clientservice.cpp:31: warning: enumeration value 'ClientConnected' not handled in switch
clientservice.cpp:31: warning: enumeration value 'ClientReg' not handled in switch
clientservice.cpp:31: warning: enumeration value 'ClientDisconnect' not handled in switch
clientservice.cpp:31: warning: enumeration value 'ServerConnected' not handled in switch
clientservice.cpp:31: warning: enumeration value 'ServerDisconnect' not handled in switch
clientservice.cpp:31: warning: enumeration value 'DoConnect' not handled in switch
clientservice.cpp:31: warning: enumeration value 'DoDisconnect' not handled in switch
clientservice.cpp:31: warning: enumeration value 'GotMessage' not handled in switch
clientservice.cpp:31: warning: enumeration value 'GotUserInfo' not handled in switch
clientservice.cpp:31: warning: enumeration value 'SendUserInfo' not handled in switch
clientservice.cpp:31: warning: enumeration value 'GotClientInfo' not handled in switch
clientservice.cpp:31: warning: enumeration value 'SendClientInfo' not handled in switch
clientservice.cpp:31: warning: enumeration value 'EventTypeEnd' not handled in switch
clientservice.cpp: In member function 'void ClientService::readClient()':
clientservice.cpp:63: warning: comparison between signed and unsigned integer expressions
clientservice.cpp:87: error: jump to case label
clientservice.cpp:83: error: crosses initialization of 'Message* msg'
clientservice.cpp:92: error: jump to case label
clientservice.cpp:88: error: crosses initialization of 'UserInfo* ui'
clientservice.cpp:83: error: crosses initialization of 'Message* msg'
clientservice.cpp:97: error: jump to case label
clientservice.cpp:93: error: crosses initialization of 'ClientInfo* ci'
clientservice.cpp:88: error: crosses initialization of 'UserInfo* ui'
clientservice.cpp:83: error: crosses initialization of 'Message* msg'
clientservice.cpp: In member function 'bool ClientService::sendToClient(CR::MsgType::MsgType, SendAble*)':
clientservice.cpp:124: warning: comparison of unsigned expression < 0 is always false
clientservice.cpp: In member function 'void ClientService::gotUserInfo(UserInfo*)':
clientservice.cpp:176: error: cast from 'ClientService*' to 'quint32' loses precision
*** Error code 1
Stop in ~/SimpleChatRoomServer
Ahora si se retira la soportes de case
DECLARACIÓN me sale este error:
g++ -c -pipe -O2 -Wall -W -DQT_NO_DEBUG -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/share/qt4/mkspecs/freebsd-g++ -I. -I/usr/local/include/qt4/QtCore -I/usr/local/include/qt4/QtNetwork -I/usr/local/include/qt4 -I. -I/usr/local/include/qt4 -I/usr/local/include -o chatserver.o chatserver.cpp
chatserver.cpp: In member function 'virtual bool ChatServer::event(QEvent*)':
chatserver.cpp:108: error: jump to case label
chatserver.cpp:98: error: crosses initialization of 'TraceEvent* te'
chatserver.cpp:94: warning: enumeration value 'EventTypeBegin' not handled in switch
chatserver.cpp:94: warning: enumeration value 'ClientConnected' not handled in switch
chatserver.cpp:94: warning: enumeration value 'ClientReg' not handled in switch
chatserver.cpp:94: warning: enumeration value 'ClientDisconnect' not handled in switch
chatserver.cpp:94: warning: enumeration value 'ServerConnected' not handled in switch
chatserver.cpp:94: warning: enumeration value 'ServerDisconnect' not handled in switch
chatserver.cpp:94: warning: enumeration value 'DoConnect' not handled in switch
chatserver.cpp:94: warning: enumeration value 'DoDisconnect' not handled in switch
chatserver.cpp:94: warning: enumeration value 'GotMessage' not handled in switch
chatserver.cpp:94: warning: enumeration value 'SendMessage' not handled in switch
chatserver.cpp:94: warning: enumeration value 'GotUserInfo' not handled in switch
chatserver.cpp:94: warning: enumeration value 'SendUserInfo' not handled in switch
chatserver.cpp:94: warning: enumeration value 'GotClientInfo' not handled in switch
chatserver.cpp:94: warning: enumeration value 'SendClientInfo' not handled in switch
chatserver.cpp:94: warning: enumeration value 'EventTypeEnd' not handled in switch
*** Error code 1
Stop in ~/SimpleChatRoomServer.
El código fuente completo de SimpleChatRoomServer.cpp
:
#include <QTextStream>
#include <QDateTime>
#include "traceevent.h"
#include "chatserver.h"
#include "chatcenterthread.h"
#include "clientservicethread.h"
#include "message.h"
#include "server.h"
ChatServer::ChatServer(QObject * parent)
:QTcpServer(parent)
{
QFile * inFile = new QFile(this);
QFile * outFile = new QFile(this);
QFile * errFile = new QFile(this);
inFile->open(stdin,QIODevice::ReadOnly);
outFile->open(stdout,QIODevice::WriteOnly);
errFile->open(stderr,QIODevice::WriteOnly);
setIO(inFile,outFile,errFile);
qobject_cast<Server *>(qApp)->csrId = this;
csrId = (QObject *)(0+CR::ServerId);
}
ChatServer::~ChatServer()
{
for(int i = 0; i < ccs.size(); i++)
{
ccs.at(i)->deleteLater();
}
}
void ChatServer::setIO(QFile * inFile,QFile * outFile,QFile * errFile)
{
in.setDevice(inFile);
out.setDevice(outFile);
err.setDevice(errFile);
}
void ChatServer::incomingConnection(int socketId)
{
ClientServiceThread *cst = new ClientServiceThread(socketId,this);
cst->start();
connect(cst,SIGNAL(finished()),cst,SLOT(deleteLater()));
}
bool ChatServer::init(quint16 & port)
{
if(!port)
{
bool ok = false;
while(!ok)
{
out<<tr("Port[5555]: ");
out.flush();
QString p;
p = in.read(1);
if(p!=QString("\n"))
{
QString strport;
strport = in.readLine(10);
strport = p + strport;
port = strport.toUInt(&ok);
}
else
{
port = 5555;
ok = true;
}
}
}
//ADD ONE ChatCenter
ChatCenterThread * cct = new ChatCenterThread(this);
cct->start();
connect(cct,SIGNAL(finished()),cct,SLOT(deleteLater()));
if(!listen(QHostAddress::Any,port))
{
error(tr("Listen at [%1] fail!").arg(port));
deleteLater();
exit(1);
return false;
}
log(tr("Listen at [%1]").arg(port));
return true;
}
bool ChatServer::event(QEvent * event)
{
if(event->type() == QEvent::User)
{
UserEvent * ue = static_cast<UserEvent *>(event);
switch(ue->userType)
{
case CR::ErrorEvent:
case CR::LogEvent:
TraceEvent * te = static_cast<TraceEvent *>(ue);
if(te->userType == CR::ErrorEvent)
{
error(te->msg);
}
else
{
log(te->msg);
}
break;
default:
return false;
}
}
else
{
return QTcpServer::event(event);
}
return true;
}
void ChatServer::error(QString msg)
{
err<<QDateTime::currentDateTime().toString(Qt::ISODate)
<<" !ERROR! "<<msg<<endl;
}
void ChatServer::log(QString msg)
{
out<<QDateTime::currentDateTime().toString(Qt::ISODate)
<<" "<<msg<<endl;
}
1) ¿Estoy usando soportes de forma incorrecta?
2) Por qué el uso de corchetes en la instrucción case
muestra crosses initialization
en otras líneas de código.
¿Estás seguro de que has publicado el código correcto? Porque los mensajes de error se quejan (entre otras cosas) de 'inicialización de 'MessageEvent * me'', y no hay ninguna variable' me' en ningún lugar del código publicado. –
@JoachimPileborg Parece que la clase 'MessageEvent * me' se encuentra en otro archivo. Gracias por verme – SIFE
Posible duplicado de [Error: salte a la etiqueta de la caja] (http://stackoverflow.com/questions/5685471/error-jump-to-case-label) –