PDA

View Full Version : Fix error missing ':' before identifier 'slots'



neda
16th February 2016, 08:10
Hi,
I create new C++ class:

myxmlclass.h:

#ifndef MYXMLCLASS_H
#define MYXMLCLASS_H


class MyXMLClass
{
public:
MyXMLClass();

public slots:
void SaveXMLFile();
void ReadXMLFile();
};

#endif // MYXMLCLASS_H


myxmlclass.cpp:

#include <myxmlclass.h>
#include <QFileDialog>
#include <QXmlStreamWriter>

void MyXMLClass::SaveXMLFile()
{

QString filename = QFileDialog::getSaveFileName(this,
tr("Save Xml"), ".",
tr("Xml files (*.xml)"));


QFile file(filename);
file.open(QIODevice::WriteOnly);

QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();

xmlWriter.writeStartElement("LAMPS");

xmlWriter.writeStartElement("LIGHT1");
xmlWriter.writeTextElement("State", "statevalue" );
xmlWriter.writeTextElement("Room", "roomvalue");
xmlWriter.writeTextElement("Potencial", "potencialvalue");

xmlWriter.writeEndElement();

file.close();
}



void MyXMLClass::ReadXMLFile()
{
QXmlStreamReader Rxml;

QString filename = QFileDialog::getOpenFileName(this,
tr("Open Xml"), ".",
tr("Xml files (*.xml)"));

QFile file(filename);
if (!file.open(QFile::ReadOnly | QFile::Text))
{
std::cerr << "Error: Cannot read file " << qPrintable(filename)
<< ": " << qPrintable(file.errorString())
<< std::endl;

}

Rxml.setDevice(&file);
Rxml.readNext();

while (!Rxml.atEnd())
{
if (Rxml.isStartElement())
{
if (Rxml.name() == "LAMPS")
{
Rxml.readNext();
}
else if (Rxml.name() == "LIGHT1")
{
while (!Rxml.atEnd())
{
if (Rxml.isEndElement())
{
Rxml.readNext();
break;
}
else if (Rxml.isCharacters())
{
Rxml.readNext();
}
else if (Rxml.isStartElement())
{
if (Rxml.name() == "State")
{
ReadStateElement();
}
else if (Rxml.name() == "Room")
{
ReadRoomElement();
}
else if (Rxml.name() == "Potencial")
{
ReadPotencialElement();
}
Rxml.readNext();
}
else
{
Rxml.readNext();
}
}
}
}
else
{
Rxml.readNext();
}

file.close();

if (Rxml.hasError())
{
std::cerr << "Error: Failed to parse file "
<< qPrintable(filename) << ": "
<< qPrintable(Rxml.errorString()) << std::endl;
}
else if (file.error() != QFile::NoError)
{
std::cerr << "Error: Cannot read file " << qPrintable(filename)
<< ": " << qPrintable(file.errorString())
<< std::endl;
}
}
}



//Example for Room Element

void MyXMLClass::ReadRoomElement()
{
while(!Rxml.atEnd())
{
if(Rxml.isEndElement())
{
Rxml.readNext();
break;
}
else if(Rxml.isStartElement())
{
QString roomelement = Rxml.readElementText(); //Get the xml value
Rxml.readNext();
break;
}
else if(Rxml.isCharacters())
{
Rxml.readNext();
}
else
{
Rxml.readNext();
}
}

}


I have syntax error : missing ':' before identifier 'slots'.

Lesiok
16th February 2016, 09:04
Between lines 6 and 7 in myxmlclass.h add :
Q_OBJECT

anda_skoa
16th February 2016, 09:58
Between lines 6 and 7 in myxmlclass.h add :
Q_OBJECT
And include <QObject> and derive from QObject

Cheers,
_