Russian Qt Forum
Ноябрь 23, 2024, 15:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 6 7 [8] 9 10 ... 13   Вниз
  Печать  
Автор Тема: Как писать ООП программы?  (Прочитано 86644 раз)
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #105 : Февраль 26, 2014, 10:06 »

Но компилятор не находит tr1. Почему? Как написать?
std::function
Записан
8Observer8
Гость
« Ответ #106 : Февраль 26, 2014, 10:27 »

Но компилятор не находит tr1. Почему? Как написать?
std::function

Говорит, что:

Цитировать
main.cpp:8: error: 'function' in namespace 'std' does not name a type
     typedef std::function func;
                ^

Код
C++ (Qt)
#include <QCoreApplication>
#include <functional>
 
int main(int argc, char *argv[])
{
   QCoreApplication app(argc, argv);
 
   typedef std::function func;
 
   return app.exec();
}
 
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #107 : Февраль 26, 2014, 10:36 »

указывать надо так:
Код
C++ (Qt)
typedef std::function<void()> someFunc;
Записан
8Observer8
Гость
« Ответ #108 : Февраль 26, 2014, 10:39 »

Всё равно говорит, что:

Цитировать
main.cpp:8: error: 'function' in namespace 'std' does not name a type
     typedef std::function func;
                ^

Код
C++ (Qt)
#include <QCoreApplication>
#include <functional>
 
int main(int argc, char *argv[])
{
   QCoreApplication app(argc, argv);
 
   typedef std::function<void()> func;
 
   return app.exec();
}
 
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #109 : Февраль 26, 2014, 10:45 »

Какой у вас компилятор?
Записан
8Observer8
Гость
« Ответ #110 : Февраль 26, 2014, 10:47 »

Вот такая сборка Qt: Qt 5.2.0 for Windows 32-bit (MinGW 4.8, OpenGL, 689 MB)
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #111 : Февраль 26, 2014, 10:48 »

в .pro необходимо добавить:
Код:
QMAKE_CXXFLAGS += -std=c++11
Записан
8Observer8
Гость
« Ответ #112 : Февраль 26, 2014, 10:50 »

в .pro необходимо добавить:
Код:
QMAKE_CXXFLAGS += -std=c++11

Спасибо огромное! Работает Улыбающийся
Записан
8Observer8
Гость
« Ответ #113 : Февраль 26, 2014, 11:01 »

Только меня смущает, что имя "function" не отображается в подсказках:

Записан
8Observer8
Гость
« Ответ #114 : Февраль 26, 2014, 12:19 »

Помогите, пожалуйста, понять и исправить эту ошибку:

Цитировать
042_typename\main.cpp:44: error: expected template-name before '<' token
 class Derived: public Base<T>::Nested { // СЃРїРёСЃРѕРє базовых классов:
                                      ^

Код
C++ (Qt)
#include <QCoreApplication>
 
class Base
{
public:
   Base() {}
   class Nested
   {
   public:
       Nested() {}
   };
};
 
template <typename T>
class Derived: public Base<T>::Nested { // список базовых классов:
public:                                 // typename не допускается
   explicit Derived(int x) :
       Base<T>::Nested(x) /* идентификатор базового класса
                             * в списке инициализации членов:
                             * typename не допускается
                             */

   {
       typename Base<T>::Nested temp; /* использование вложенного
                                       * зависимого имени типа не как
                                       * идентификатора базового
                                       * класса в списке инициализации
                                       * членов: typename необходимо
                                       */

   }
};
 
int main(int argc, char *argv[])
{
   QCoreApplication a(argc, argv);
 
   return a.exec();
}
 

P.S. Это код из правила: http://www.e-reading.bz/chapter.php/1002058/106/Mayers_-_Effektivnoe_ispolzovanie_CPP.html
Записан
8Observer8
Гость
« Ответ #115 : Февраль 26, 2014, 12:26 »

Я нашёл ошибку Улыбающийся

Код
C++ (Qt)
template <typename T>
class Base
{
public:
   Base() {}
   class Nested
   {
   public:
       Nested() {}
   };
};
 
Записан
8Observer8
Гость
« Ответ #116 : Февраль 26, 2014, 12:49 »

Помогите, пожалуйста, понять следующую вещь. Я так понял, что когда мы передаём объекты элементарных типов (int, double и т.д.), то передавать по ссылке на константу или по значению - разницы нет. Для объектов отстальных типов нужно использовать передачу по ссылке на константу. А как обстоит дело и итераторами? Передавать по ссылке на константу или по значению?

Код
C++ (Qt)
#include <QCoreApplication>
#include <vector>
#include <QDebug>
 
/**
* Локальная копия объекта, на который указывает итератор
*/

template <typename IterT>
void workWithIterator(const IterT& iter)
{
   typedef typename std::iterator_traits<IterT>::value_type value_type;
   value_type temp(*iter);
   qDebug() << temp;
}
 
int main(int argc, char *argv[])
{
   QCoreApplication a(argc, argv);
 
   std::vector<int> arr;
   arr.push_back(5);
   arr.push_back(7);
 
   workWithIterator(arr.begin());
 
   return a.exec();
}
 
« Последнее редактирование: Февраль 26, 2014, 12:54 от 8Observer8 » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #117 : Февраль 26, 2014, 13:23 »

По значению. Вообще если класс "достаточно мал" - он обычно подается/возвращается по значению. Напр (Q)Point, (Q)Rect, (Q)Size
Записан
8Observer8
Гость
« Ответ #118 : Февраль 26, 2014, 13:28 »

Спасибо! В данном случае - понятно. А если это класс Person, в котором: имя, фамилия, отчество и дата рождения? Это довольно маленький класс.
« Последнее редактирование: Февраль 26, 2014, 13:41 от 8Observer8 » Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #119 : Февраль 26, 2014, 13:46 »

По значению. Вообще если класс "достаточно мал" - он обычно подается/возвращается по значению. Напр (Q)Point, (Q)Rect, (Q)Size
в Qt эти классы в большинстве мест передаются по константной ссылке.

Спасибо! В данном случае - понятно. А если это класс Person, в котором: имя, фамилия, отчество и дата рождения? Это довольно маленький класс.
Если класс больше чем int, double и т.д., то он обычно передается по константной ссылке.

По поводу итераторов:
Итераторы содержат как правило всего лишь один указатель на какой-либо узел, поэтому они передается по значению.
Записан
Страниц: 1 ... 6 7 [8] 9 10 ... 13   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.474 секунд. Запросов: 23.