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

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

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2012, 07:52   #1
Mixim
Форумчанин
 
Регистрация: 29.10.2009
Сообщений: 259
По умолчанию Логический тип данных Qt

Продолжаю свое знакомство с Qt. Необходимо реализовать функцию, результатом выполнения которой будет логическое значение. Вполне возможно использовать стандартный класс C++ bool, но хочется взять за основу расширения Qt и его класс QBool - как понимаю, это и есть аналог булевой переменной C++.
Пишу следующий незамысловатый код в header'е:
Код:
#include <QString>
#include <ctype.h>



class MyClass
{
public:
    MyClass();

    QBool SomeFunction(qreal SomeArgument);
};
А в cpp вояю следующее:
Код:
include "myclass.h"

MyClass::MyClass()
{

}

QBool SomeFunction(qreal SomeArgument)
{
    QBool returnedValue=false;





    return returnedValue;
}
и на выделенной строчке получаю ошибку:
Цитата:
/windows/MyProject/MyProject/myclass.cpp:19: ошибка: conversion from 'bool' to non-scalar type 'QBool' requested
если правильно понимаю:
Цитата:
запрошено преобразование из 'bool' в нескалярный 'QBool'
Полазил немного по сети и на BugReport Qt нашел пример использования класса QBool(присвоение), которое в моем случае должно выглядить так:
Код:
QBool SomeFunction(qreal SomeArgument)
{
    QBool returnedValue=QBool(false);


    return returnedValue;
}
- как понимаю, это приведение типов - неужели нельзя без приведения логической переменной присвоить булевое значение или я не понимаю назначение класса QBool? Если кому-нибудь несложно, прошу объяснить это. Посмотрел в книгах(Шлее - Qt 4.5 Проффесиональное программирование на C++, Земсков - Программирование на C++ с использованием библиотеки Qt4) как использовать класс QBool, но в указанной литературе неудалось даже найти упоминание об этом классе, везде используется bool.
Заранее благодарю
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
Mixim вне форума Ответить с цитированием
Старый 01.08.2012, 08:02   #2
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

В каком месте тут приведение типов? Вы просто вызываете конструктор класса QBool, и он Вам возвращает объект соответствующего класса. Просто они не сделали перегрузку опаратора присвоения и все.
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 01.08.2012, 08:28   #3
Mixim
Форумчанин
 
Регистрация: 29.10.2009
Сообщений: 259
По умолчанию

Цитата:
Сообщение от Петррр Посмотреть сообщение
В каком месте тут приведение типов? Вы просто вызываете конструктор класса QBool, и он Вам возвращает объект соответствующего класса. Просто они не сделали перегрузку опаратора присвоения и все.
Спасибо за разъяснения, но почему нет приславутой перегрузки, неужели это так сложно реализовать?
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
Mixim вне форума Ответить с цитированием
Старый 01.08.2012, 08:34   #4
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Нет, не сложно. Напишите в Qt Community.
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 01.08.2012, 08:39   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

QBool в принципе особо нет смысла применять.
и видно что он какой то не очень, зачем explicit конструктор поставили...
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.08.2012, 09:21   #6
Mixim
Форумчанин
 
Регистрация: 29.10.2009
Сообщений: 259
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
и видно что он какой то не очень
Похоже действительно QBool - это какой-то кастыль. Пишу заведомо неверный код, ошибка в котором должна быть отловлена еще на этапе компиляции:
Код:
    QBool myBool1=QBool(true);
    delete myBool1;
т.е. работаю как бы не с указателем, а память пытаюсь освободить с помощью delete, для int бы такое не прокатило:
Код:
    int value=2;
    delete value;
- ошибка: type 'int' argument given to 'delete', expected pointer, а для QBool вполне прокатывает, программа компилируется, но при исполнении выдает целый лог с ошибками, в частности:
Цитата:
/home/mixim/QtSDK/Projects/untitled/main.cpp:24: ошибка: type 'int' argument given to 'delete', expected pointer
, т.е. для int ошибка отлавливается на этапе компиляции, а для QBool на этапе исполнения. Если правильно понимаю, QBool является оберткой для типа int и на его основе организует булевую логику.
Чтобы случайно не наступить на указанные грабли, лучше вместо Qt'ного QBool буду использовать bool от C++.
Ради интереса решил посмотреть каким образом Qt отлавливает аналогичные ошибки для других "родных типов". Пишу код:
Код:
quint16 value=2;
delete value;
на который на этапе компиляции получаю ошибку: "/home/mixim/QtSDK/Projects/untitled/main.cpp:28: ошибка: type 'quint16 {aka short unsigned int}' argument given to 'delete', expected pointer", т.е. такая штуковина, такие грабли действуют только с QBool, а с другими во истину Qt'ными типами такое не проходит
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.

Последний раз редактировалось Mixim; 01.08.2012 в 09:30.
Mixim вне форума Ответить с цитированием
Старый 01.08.2012, 21:29   #7
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
По умолчанию

Откуда ты его откопал? Мамонт наверное уже, так как в QtCreator Основан на Qt 4.7.4 (64-х битной) хелп не нашёл данного класса
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума Ответить с цитированием
Старый 02.08.2012, 09:00   #8
Mixim
Форумчанин
 
Регистрация: 29.10.2009
Сообщений: 259
Подмигивание

Цитата:
Сообщение от xwicked Посмотреть сообщение
Откуда ты его откопал? Мамонт наверное уже, так как в QtCreator Основан на Qt 4.7.4 (64-х битной) хелп не нашёл данного класса
Нашел с помощью Google, я вообще мастер по поиску того, что другие найти не могут. Ладно, уже понял, что идея использовать QBool была не самой удачной
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
Mixim вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тип данных в С++ Mashul'ka Помощь студентам 3 29.03.2011 20:53
INSERT INTO таблица () VALUES(логический тип, дата) UNToxa БД в Delphi 1 14.01.2011 23:26
тип поля логический TAK Microsoft Office Access 1 19.05.2010 21:19
Логический тип(Delphi 7) matrix8325 Помощь студентам 1 22.04.2009 00:18
В Access есть тип данных "Счетчик".Есть ли подобный тип данных в MS Sql Server 2000? An_ton SQL, базы данных 5 16.01.2009 17:55