Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Green_ от Май 07, 2013, 13:53



Название: Прошу помощи - компилирует ошибку постоянно
Отправлено: Green_ от Май 07, 2013, 13:53
Доброго времени суток.
Ситуация такова... изучаю Qt по видеоурокам от Brayn'a (например, вот по этому видео http://www.youtube.com/watch?v=xm_fkZolMFA)...все идет хорошо, но вот проблема стала в том, что при выполнении точно таих же манипуляций и кода программы и т.д. у меня вылазит ошибка. Причем не только в этом уроке, что указал выше, а во многих.
Версии в уроке Qt creator'a  2.1.0 (или 2.2.0 - он там в каком-то уроке показывал, что обновил версию программы), а у меня 2.7.0

сама ошибка:
(http://s21.postimg.org/65v3yzy2f/image.jpg) (http://postimg.org/image/vbw25tzcj/full/)

и вылазит она на подключении класса С++ и вызова его в main.cpp. Без этих 2х строчек объявления и вызова все работает хорошо. Склоняюсь к тому, что либо в последней версии что-то поменяли, что надо что-то прописывать отдельно, либо сами настройки Qt нужно просмотреть...возможно какие библиотеки по умолчанию чтобы работали.

Помогите куда копать и на что думать, чтобы убрать ошибку. Или может где галочку поставить в настройках и все будет гуд)

вот эти строки в main.cpp:
    MyServer Server;
    Server.StartServer();


PoolSrv.pro
Код:
QT       += core
QT       += network
QT       -= gui

TARGET = PoolSrv
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp \
    myserver.cpp \
    myrunnable.cpp

HEADERS += \
    myserver.h \
    myrunnable.h

myrunnable.h
Код:
#ifndef MYRUNNABLE_H
#define MYRUNNABLE_H

#include <QRunnable>
#include <QTcpSocket>
#include <QDebug>

class MyRunnable : public QRunnable
{
public:
    explicit MyRunnable();
    int SocketDescriptor;

protected:
    void run();
    
    
};

#endif // MYRUNNABLE_H

myserver.h
Код:
#ifndef MYSERVER_H
#define MYSERVER_H

#include <QTcpServer>
#include <QThreadPool>
#include <QDebug>
#include "myrunnable.h"

class MyServer : public QTcpServer
{
    Q_OBJECT
public:
    explicit MyServer(QObject *parent = 0);
    void StartServer();

protected:
    void incomingConnection(int handle);

signals:
    
public slots:

private:
    QThreadPool * pool;
    
};

#endif // MYSERVER_H

main.cpp
Код:
#include <QtCore/QCoreApplication>
#include "myserver.h"
#include "myrunnable.h"


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    MyServer Server;
    Server.StartServer();

    
    return a.exec();
}

myrunnable.cpp
Код:
 #include "myrunnable.h"

MyRunnable::MyRunnable() :
{
}

void MyRunnable::run()
{
    if(!SocketDescriptor) return;

    QTcpSocket socket;
    socket.setSocketDescriptor(SocketDescriptor);

    socket.write("hello world");
    socket.flush();
    socket.waitForBytesWritten();
    socket.close();
}

myserver.cpp
Код:
#include "myserver.h"

MyServer::MyServer(QObject *parent) :
    QTcpServer(parent)
{
    pool = new QThreadPool(this);
    pool->setMaxThreadCount(5);
}

void MyServer::StartServer()
{
    if(this->listen(QHostAddress::Any,1234))
    {
        qDebug() << "Server started";
    }
    else
    {
        qDebug() << "Server did not start!";
    }
}

void MyServer::incomingConnection(int handle)
{
    MyRunnable *task = new MyRunnable();
    task->setAutoDelete(true);

    task->SocketDescriptor = hendle;
    pool->start(task);
}


Название: Re: Прошу помощи - компилирует ошибку постоянно
Отправлено: Igors от Май 07, 2013, 14:03
Выглядит так что myserver.cpp не подключен к проекту. Для начала поставить в этом файле (можно первой строкой)

#error "123"

и смотреть выскочит ли эта ошибка. Потом проверять может namespace где-то затесалось


Название: Re: Прошу помощи - компилирует ошибку постоянно
Отправлено: Fat-Zer от Май 07, 2013, 14:15
и ещё попробуй сборка->очистить всё и сборка->пересобрать всё...


Название: Re: Прошу помощи - компилирует ошибку постоянно
Отправлено: Green_ от Май 07, 2013, 21:14
Выглядит так что myserver.cpp не подключен к проекту. Для начала поставить в этом файле (можно первой строкой)

#error "123"

и смотреть выскочит ли эта ошибка. Потом проверять может namespace где-то затесалось

Вы имеете в виду вот так?

myserver.cpp
Код:
#error "123"
#include "myserver.h"

MyServer::MyServer(QObject *parent) :
    QTcpServer(parent)
{
    pool = new QThreadPool(this);
    pool->setMaxThreadCount(5);
}

void MyServer::StartServer()
{
    if(this->listen(QHostAddress::Any,1234))
    {
        qDebug() << "Server started";
    }
    else
    {
        qDebug() << "Server did not start!";
    }
}

void MyServer::incomingConnection(int handle)
{
    MyRunnable *task = new MyRunnable();
    task->setAutoDelete(true);

    task->SocketDescriptor = hendle;
    pool->start(task);
}

Те же ошибки при компиляции. Новых нет.
Namespace или что-то подобное - это вряд ли. Я тупо проверил все что написано в видеоуроке и не раз прошелся по всем пунктам. В уроке все стартануло, у меня не хочет работать с классом С++ (комментирую те 2 строки объявления класса и все работает).
т.е.
main.cpp
Код:
    //MyServer Server;
    //Server.StartServer();

и ещё попробуй сборка->очистить всё и сборка->пересобрать всё...

не помогло =(


Название: Re: Прошу помощи - компилирует ошибку постоянно
Отправлено: Bepec от Май 07, 2013, 21:25
Проект в архив, архив в сообщение, сообщение на форум, я скачиваю, компилирую, разбираюсь с ошибкой. План ошибок не имеет, выполнять :)

PS данное сообщение является шуточным, но содержит в себе алгоритм действий для достижения максимального результата в минимальные сроки.


Название: Re: Прошу помощи - компилирует ошибку постоянно
Отправлено: Green_ от Май 07, 2013, 21:39
to Bepec

http://rghost.ru/45837038

я залил папку, созданную Qt. нужны ли еще какие файлы? Просто запустив проект не в родной папке, а из-под другого локального диска - там даже при комментировании тех 2х строк в main.cpp вылазит эта ошибка. При том, что в родной папке, где проект создавался все нормально при комментировании


Название: Re: Прошу помощи - компилирует ошибку постоянно
Отправлено: Пантер от Май 07, 2013, 21:44
Код
C++ (Qt)
MyRunnable::MyRunnable()
: QRunnable ()
{
}
 
Код
C++ (Qt)
void MyServer::incomingConnection(int handle)
{
MyRunnable *task = new MyRunnable();
task->setAutoDelete(true);
 
task->SocketDescriptor = handle;
pool->start(task);
}
 
Собирается.


Название: Re: Прошу помощи - компилирует ошибку постоянно
Отправлено: Green_ от Май 07, 2013, 21:56
to Пантер

Эти места вполне собираются. Проблема решается, когда я в main.cpp не объявляю переменную Server, а после не вызываю из нее команду Server.StartServer();

т.е. при комментировании этих 2х строчек мы имеем рабочую программу.
вот эти строки:
Код:
// MyServer Server;
// Server.StartServer();


Название: Re: Прошу помощи - компилирует ошибку постоянно
Отправлено: Пантер от Май 07, 2013, 21:59
Значит что-то у тебя не так. У меня не собиралось, пока я не фиксанул ошибки. Исправленный код я указал. дальше все собирается без проблем.


Название: Re: Прошу помощи - компилирует ошибку постоянно
Отправлено: Green_ от Май 07, 2013, 22:11
тогда вопрос в другом. как правильно собирать qt-creator? возможно я не все собрал
мои действия:
скачал с http://qt-project.org/downloads
сам Qt 5.0: The binary packages include Qt 5.0.2 libraries and Qt Creator 2.7.0
файл Qt 5.0.2 for Windows 32-bit (VS 2010, 485 MB) (Info)
установил этот exe и все. Я что-то пропустил?


Название: Re: Прошу помощи - компилирует ошибку постоянно
Отправлено: Пантер от Май 07, 2013, 22:18
qt-creator тут не при чем, это всего лишь IDE.
По 5 Кьюту не подскажу, ибо не щупал его еще.


Название: Re: Прошу помощи - компилирует ошибку постоянно
Отправлено: Lettuce от Май 07, 2013, 23:00
тогда вопрос в другом. как правильно собирать qt-creator? возможно я не все собрал
мои действия:
скачал с http://qt-project.org/downloads
сам Qt 5.0: The binary packages include Qt 5.0.2 libraries and Qt Creator 2.7.0
файл Qt 5.0.2 for Windows 32-bit (VS 2010, 485 MB) (Info)
установил этот exe и все. Я что-то пропустил?

Нет, всё правильно сделали, сам этими сборками пользуюсь, правда с компилятором mingw. Но у меня всё откомпилировалось с первого раза, не считая мелких ошибок вроде hEndle вместо hAndle, так что попробуйте сборку с mingw, либо поковыряйте VS.


Название: Re: Прошу помощи - компилирует ошибку постоянно
Отправлено: Green_ от Май 07, 2013, 23:35
to Lettuce
вполне придется переустановить Qt. Я реально не могу понять почему он не хочет работать с обычными с виду классами и переменными от них.
Качаю mingv и проверю на нем как докачаю.

а VS 2010 у меня установлен, но я им не пользуюсь - все собирается в Qt creator'e. Как вариант, возможно настройки самого VS "испортили" Qt...хотя и там и там там все стоит по умолчанию и я ничего не менял. И не портировал


Название: Re: Прошу помощи - компилирует ошибку постоянно
Отправлено: Green_ от Май 08, 2013, 01:30
Переставил Qt с VS на mingv - все заработало. Я даже не знаю что сказать - и на VS и тут настройки по умолчанию. Причину таких  косяков так и не понял.
Всем спасибо за помощь! Буду дальше разбираться)


Название: Re: Прошу помощи - компилирует ошибку постоянно
Отправлено: ViTech от Май 08, 2013, 10:50
После исправления ошибок, которые привел Пантер, на Qt 5.0.2 компилятором от VS 2012 собирается нормально. Правда Qt я сам собирал, но это не должно влиять на компиляцию такого простого проекта. Может надо было запустить еще раз qmake для проекта и пересобрать, иногда помогает :).