#ifndef CHTMLPARSER_H
#define CHTMLPARSER_H
#include <QThread>
#include <QFile>
#include <QTextStream>
#include <QStringList>
enum FindType
{
KMP,
OvB,
};
class CHtmlParser:
public QThread
{
Q_OBJECT
private:
CHtmlParser(void){}
public:
explicit CHtmlParser(const QString& file)
:parse_file(file), parse_result()
{ }
~CHtmlParser(void)
{ parse_result.clear(); }
public:
static void setOpenTag(const QString& tag)
{ CHtmlParser::tag_open = tag; }
static void setCloseTag(const QString& tag)
{ CHtmlParser::tag_close = tag; }
static void setFindType(const FindType& type)
{ CHtmlParser::find_type = type; }
protected:
void run(void)
{ parsing(); }
private:
void parsing(void)
{
//... some code
}
long getEntry_KMP(QTextStream& stream,
long start_position,
long end_position,
const QString& sub_string)
{
//... some code
}
long getEntry_OvB(QTextStream& stream,
long start_position,
long end_position,
const QString& sub_string)
{
//... some code
}
private:
QString parse_file;
QStringList parse_result;
private:
static QString tag_open;
static QString tag_close;
static FindType find_type;
static const long block_size = 500;
static const long no_entry = -1;
};
FindType CHtmlParser::find_type = FindType(KMP);
QString CHtmlParser::tag_open = "<img src=\"";
QString CHtmlParser::tag_close = "\" ";
#endif // CHTMLPARSER_H
Qt по ходу баг
Код:
и
Код:
#include <QtCore/QCoreApplication>
#include "C:\Users\artem\Documents\LectureManager\CHtmlParser.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
CHtmlParser parser("index.htm");
parser.start();
parser.wait();
return a.exec();
}
#include "C:\Users\artem\Documents\LectureManager\CHtmlParser.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
CHtmlParser parser("index.htm");
parser.start();
parser.wait();
return a.exec();
}
компилятор ругается следующим образом:
[ATTACH]4014[/ATTACH]
использую, Qt 4.6, QtCreator 1.3...
Не могу понять в чем дело!
[ATTACH]4015[/ATTACH]
Уже не актуально :)
Цитата: grgdvo
Бага нет, похоже сначала вам надо свой класс прогнать через moc-компилятор.
Уже не актуально :)
Уже не актуально :)
то есть выполнить qmake, не помогло, что очень странно!
очистка + qmake + сборка тоже не дало эффекта!
Хотя на первый взгляд все правильно написано. Попробуй вынести инициализацию в .cpp файл.
Цитата: GreenRiver
Здесь похоже проблема в инициализации статических членов класса: компилятор именно на них ругается.
Хотя на первый взгляд все правильно написано. Попробуй вынести инициализацию в .cpp файл.
Хотя на первый взгляд все правильно написано. Попробуй вынести инициализацию в .cpp файл.
самое смешное, что это вроде как решило проблему! но вопрос почему первоначально не работало, ведь фактически ни чего не изменилось... может мне это кто нить объяснить? бо лично я в замешательстве!
Компилятор считает, что это попытка ещё раз объявить статическую переменную в классе. Тонкость ли это C++ или данного компилятора, я не знаю :D Скорее первое...
Цитата: GreenRiver
Компилятор считает, что это попытка ещё раз объявить статическую переменную в классе. Тонкость ли это C++ или данного компилятора, я не знаю :D Скорее первое...
ну в общем спишем все на gcc, бо раньше я успешно объявлял и инициализировал переменные в одном файле, пользуя при этом компилятор от мелкософта.
Цитата: GreenRiver
Компилятор считает, что это попытка ещё раз объявить статическую переменную в классе. Тонкость ли это C++ или данного компилятора, я не знаю :D Скорее первое...
Либо бок товарисча. Потому как видимо в объявление включен спп-файл. ИМХО это тонкости не си-пласпласа - а конкретного камрада.
Q_OBJECT - указание MOC (Meta Object Compiler). Тут тонкость системы компиляции и сборки. Для работы MOC необходимо объявление класса вынести в .h или .hpp, а реализацию в .cpp! Все просто.
Цитата: asmforce
Q_OBJECT - указание MOC (Meta Object Compiler). Тут тонкость системы компиляции и сборки. Для работы MOC необходимо объявление класса вынести в .h или .hpp, а реализацию в .cpp! Все просто.
Ну так на том и порешили. Разве нет?