Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2014, 19:02   #91
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Цитата:
field "_timer" has incomplete type
Потому что компилятор не знает, что такое QTime. Вы забыли написать #include <QTime>

Вообще-то вам нужен QTimer, а не QTime. Хотя такой класс тоже есть. Найдите его в Help'е и прочитайте первый абзац описания, чтобы знать, что он делает. Может в будущем он вам пригодится
8Observer8 вне форума Ответить с цитированием
Старый 19.10.2014, 19:31   #92
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

Цитата:
Вообще-то вам нужен QTimer, а не QTime
Это описка произошла у меня

В заголовочном файле попытался объявить статическую переменную типа Time для того, что б в описании конструктора и в слоте менялось его текущее значение.
Код:
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

private slots:
    void on_pushButton_clicked();
    void myDialog();

private:
    Ui::Dialog *ui;
    QTimer _timer;
    static Time t;
};
Time Dialog::t;
в dialog.cpp два метода в слоте:
Код:
void myDialog();
для ввода пользователем времени и использования сеттера и
Код:
 void on_pushButton_clicked();
;
для посекундного изменения значения времени с использованием геттеров

Qt говорит, мол, множественное обьявление Time t и первое из обьявлений здесь:
Код:
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();

    return a.exec();
}
хотя его там вроде как нет!
Изображения
Тип файла: jpg Безымянный.jpg (30.4 Кб, 111 просмотров)
igoreshka3333 вне форума Ответить с цитированием
Старый 19.10.2014, 19:45   #93
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Код:
Time Dialog::t;
Что это такое?
8Observer8 вне форума Ответить с цитированием
Старый 19.10.2014, 19:48   #94
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

Ну что бы создать статическую переменную, надо обьявить ее позже как глобальную!
igoreshka3333 вне форума Ответить с цитированием
Старый 19.10.2014, 20:17   #95
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Я статические переменные никогда не использовал. Проблема в том, что два раза объявлять переменную нельзя:
Код:
    static Time t;
};
Time Dialog::t;
У вас всё равно один диалог и он будет до конца программы жить:

Код:
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();

    return a.exec();
}
Так что удалите слово static и эту строку:
Код:
Time Dialog::t;
Если хотите использовать статическую переменную, то эту строку "Time Dialog::t;" нужно написать в файле "Dialog.cpp"

Последний раз редактировалось Stilet; 22.10.2014 в 07:38.
8Observer8 вне форума Ответить с цитированием
Старый 19.10.2014, 22:07   #96
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

Т не делаю больше статической!
После компиляции стопорится!

Может проблема в этих методах:
Код:
void Dialog::myDialog()
{
    int h = ui->lineEdit->text().toInt();
    int m = ui->lineEdit_2->text().toInt();
    int s = ui->lineEdit_3->text().toInt();
    t.set_Time(h, m, s);
}

void Dialog::on_pushButton_clicked()
{

  t--;
  int ho = t.hour();
  int mi = t.min();
  int se = t.sec();
  ui->lineEdit_7->setText( QString::number( ho ) );
  ui->lineEdit_8->setText( QString::number( mi ) );
  ui->lineEdit_9->setText( QString::number( se ) );
}
Эта привязана к QTimer:
Код:
on_pushButton_clicked()
а эта не привязана:
Код:
Dialog::myDialog()
Изображения
Тип файла: jpg Безымянный.jpg (26.7 Кб, 119 просмотров)

Последний раз редактировалось Stilet; 22.10.2014 в 07:38.
igoreshka3333 вне форума Ответить с цитированием
Старый 19.10.2014, 22:20   #97
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Что значит "стопорится"? Покажите весь код из "Dialog.h" и "Dialog.cpp"
8Observer8 вне форума Ответить с цитированием
Старый 19.10.2014, 22:41   #98
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

Dialog.h
Код:
#ifndef DIALOG_H
#define DIALOG_H

#include <iostream>
#include <windows.h>
#include <process.h>
#include <stdexcept>
#include <QDialog>
#include <QTimer>

class Time
{
private:
    int _hour;
    int _min;
    int _sec;
public:
    Time(int h = 0, int m = 0, int s = 0) :
        _hour( h ), _min ( m ), _sec ( s ) {}
    int hour() const { return _hour; }
    int min() const { return _min; }
    int sec() const { return _sec; }
    void set_Time(int, int, int);
    void get_time();
    bool isMin () const { return (_min >= 0 && _min < 60); }
    bool isSec () const { return (_sec >= 0 && _sec < 60); }
    Time& operator--();
    Time operator--( int );
    void sw () const
    {
        std::cout.fill('0');
        std::cout.width(2);
    }
    void tick();
};
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

private slots:
    void on_pushButton_clicked();
    void myDialog();

private:
    Ui::Dialog *ui;
    QTimer _timer;
    Time t;
};

#endif // DIALOG_H
Dialog.cpp
Код:
#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    connect( &_timer, SIGNAL( timeout() ),
                 this, SLOT(on_pushButton_clicked() ) );
    _timer.start( 1000 );
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::myDialog()
{
    int h = ui->lineEdit->text().toInt();
    int m = ui->lineEdit_2->text().toInt();
    int s = ui->lineEdit_3->text().toInt();
    t.set_Time(h, m, s);
}

void Dialog::on_pushButton_clicked()
{

  t--;
  int ho = t.hour();
  int mi = t.min();
  int se = t.sec();
  ui->lineEdit_7->setText( QString::number( ho ) );
  ui->lineEdit_8->setText( QString::number( mi ) );
  ui->lineEdit_9->setText( QString::number( se ) );
}

void Time::set_Time(int h, int m, int s)
{
    if (h==0 && m==0 && s==0)
    {
        throw std::out_of_range("\nError: the timer can not be"
                                "initialized with zero values");
    }
    const int beginOfRange = 0;
    const int endOfRange = 60;
    if ( ( m < beginOfRange ) || ( m > endOfRange ) ||
         ( s < beginOfRange ) || ( s > endOfRange ) )
    {
        throw std::out_of_range( "\nError: argumets must be from the range ("
                                 + std::to_string( beginOfRange ) +
                                 ", " + std::to_string( endOfRange ) + ")");
    }
    _hour = h;
    _min = m;
    _sec = s;
}
//---------------------------------------------------------------
void Time::tick()
{
    if (_sec == 0)
    {
        if (_min == 0 && _hour == 0)
        {
            std::cout << std::endl;
            system ("pause");
            exit (1);
        }
        if (_min == 0 && _hour>0)
        {
            _min = 60;
            _hour--;
        }
        _sec = 60;
        _min--;
    }
    _sec--;
}
//------------------------------------------------------
Time& Time::operator-- ()
{
    tick();
    return *this;
}
//------------------------------------------------------
Time Time::operator--( int )
{
    Time t = *this;
    tick();
    return t;
}
//------------------------------------------------------
void Time::get_time ()
{
    while (true)
    {
        std::cout << "\nEnter the hours: ";
        std::cin.unsetf(std::ios::skipws);
        std::cin >> _hour;
        if (std::cin.good() )
        { break; }
        std::cin.clear(); std::cin.ignore(10, '\n');
        std::cerr << "Wrong format!!!";
    }
    std::cin.clear(); std::cin.ignore(10, '\n');
    while (true)
    {
        std::cout << "Enter the minutes: ";
        std::cin.unsetf(std::ios::skipws);
        std::cin >> _min;
        if (isMin() && std::cin.good())
        {  break; }
        std::cin.clear(); std::cin.ignore(10, '\n');
        std::cerr << "Wrong format!!!\n";
    }
    std::cin.clear(); std::cin.ignore(10, '\n');
    while (true)
    {
        std::cout << "Enter the seconds: ";
        std::cin.unsetf(std::ios::skipws);
        std::cin >> _sec;
        if (isSec() && std::cin.good())
        {  break; }
        std::cin.clear(); std::cin.ignore(10, '\n');
        std::cerr << "Wrong format!!!\n";
    }
}
igoreshka3333 вне форума Ответить с цитированием
Старый 19.10.2014, 23:17   #99
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Для каждого класса должен быть свой заголовочный файл и свой файл реализации:
- Для класса Dialog: Dialog.h и Dialog.cpp
- Для класса Time: Time.h и Time.cpp

Вынесите класс Time в файлы и подключите в Dialog: #include "Time.h". Запустите проект. И если ошибок компиляции нет, то выложите файлы: Time.h, Time.cpp, Dialog.h, Dialog.cpp
8Observer8 вне форума Ответить с цитированием
Старый 19.10.2014, 23:45   #100
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

Все та же ошибка! Когда пытаюсь клацнуть на область ввода, приложение глючит, всплывает окошко: приложение ... завершает свою работу!
igoreshka3333 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
описать класс в с# volkodinocka Помощь студентам 0 09.11.2013 22:05
Описать класс С# NeoX_2011 Помощь студентам 1 19.03.2012 00:10
C# исправление ошибки. Описать класс, реализующий шестнадцатеричный счетчик PROkaZZZniK Помощь студентам 7 09.02.2012 16:29
Описать класс-родитель и класс-потомок. Delphi 7 Andrew_M Помощь студентам 0 15.01.2011 14:42
Описать класс. Telec Общие вопросы C/C++ 1 30.04.2010 18:43