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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Конструкторы, параметры по умолчанию...  (Прочитано 10184 раз)
catprog
Гость
« : Февраль 18, 2010, 12:58 »

У меня такой вопрос, иногда в функцию(конструктор) на до передавать больше параметров чем обычно, но нехочется во всех вызовах приписывать эти пустые параметры, как сделать их пустыми в случае отсутствия.

Вот например если параметр по умолчанию типа int
Код:
bool Class_name::method_name(int item_name,int item_rel_level = REL_LEVEL_INDEPENDENT)
{
    // тело функции
    return false;
}

А как сделать что бы по умолчанию был пустой QMap <QString,QString>Непонимающий

Может лучше перегрузить конструктор и тело моего большого конструктора вынести в отдельный метод инит?
Записан
niXman
Гость
« Ответ #1 : Февраль 18, 2010, 13:07 »

Цитировать
А как сделать что бы по умолчанию был пустой QMap<QString,QString>
Код
C++ (Qt)
func(int v, const QMap<QString,QString>& m = QMap<QString,QString>()) {
}
 
Записан
catprog
Гость
« Ответ #2 : Февраль 18, 2010, 14:11 »

А что значит в Вашем примере const и & ?
Сделал метод как показали, компилируется и так:
Код:
int test_method(int index,const QMap <QString,QString>& additional_params);

int Calc_item::test_method(int index, const QMap <QString,QString>& additional_params = QMap <QString,QString>())
{
    return 1;
}
и так:
Код:
int test_method(int index,QMap <QString,QString> additional_params);

int Class_name::test_method(int index, QMap <QString,QString> additional_params = QMap <QString,QString>())
{
    return 1;
}

но при вызове this->test_method(1); все равно требует второй параметр у метода, почему?
Записан
Павел_F.
Гость
« Ответ #3 : Февраль 18, 2010, 14:23 »

Почитайте книжку по c/с++. Страуструб вам вполне подойдет.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #4 : Февраль 18, 2010, 14:24 »

catprog, покажи объявление метода test_method
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
BlackTass
Гость
« Ответ #5 : Февраль 18, 2010, 14:28 »

впишите умолчальный параметр в объявлении метода (в хедере), а в определении уберите
Код:
int test_method(int index,const QMap <QString,QString>& additional_params = QMap <QString,QString>());

int Calc_item::test_method(int index, const QMap <QString,QString>& additional_params)
{
    return 1;
}
Записан
catprog
Гость
« Ответ #6 : Февраль 18, 2010, 14:33 »

catprog, покажи объявление метода test_method
Я и показал два варианта, вон строка из интерфейса класса и само описание метода, чтоб пост не раздувать метод ничего не делает.
Записан
catprog
Гость
« Ответ #7 : Февраль 18, 2010, 14:34 »

впишите умолчальный параметр в объявлении метода (в хедере), а в определении уберите
Код:
int test_method(int index,const QMap <QString,QString>& additional_params = QMap <QString,QString>());

int Calc_item::test_method(int index, const QMap <QString,QString>& additional_params)
{
    return 1;
}

Так совсем не компилируется.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #8 : Февраль 18, 2010, 14:36 »

Так совсем не компилируется.

приаттач лог сборки
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
catprog
Гость
« Ответ #9 : Февраль 18, 2010, 14:53 »

Так совсем не компилируется.

приаттач лог сборки

Код:
Running build steps for project test_proj...
Configuration unchanged, skipping QMake step.
Starting: C:/Qt/2009.02/mingw/bin/mingw32-make.exe -w
C:\Qt\2009.02\mingw\bin\mingw32-make.exe: Entering directory `D:/QT/job/test_proj'
C:/Qt/2009.02/mingw/bin/mingw32-make.exe -f Makefile.Debug
mingw32-make.exe[1]: Entering directory `D:/QT/job/test_proj'
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\2009.02\qt\include\QtCore" -I"c:\Qt\2009.02\qt\include\QtGui" -I"c:\Qt\2009.02\qt\include" -I"c:\Qt\2009.02\qt\include\ActiveQt" -I"debug" -I"." -I"c:\Qt\2009.02\qt\mkspecs\win32-g++" -o debug\main.o main.cpp
In file included from mainwindow.h:7,
from main.cpp:2:
class_name.h:12: error: expected `,' or `...' before '>' token
class_name.h:12: error: missing `>' to terminate the template argument list
class_name.h:12: error: wrong number of template arguments (1, should be 2)
c:/Qt/2009.02/qt/include/QtCore/../../src/corelib/io/qdatastream.h:66: error: provided for `template<class Key, class T> class QMap'
mingw32-make.exe[1]: Leaving directory `D:/QT/job/test_proj'
C:\Qt\2009.02\mingw\bin\mingw32-make.exe: Leaving directory `D:/QT/job/test_proj'
mingw32-make.exe[1]: *** [debug/main.o] Error 1
C:\Qt\2009.02\mingw\bin\mingw32-make.exe: *** [debug] Error 2
Exited with code 2.
Error while building project test_proj
When executing build step 'Make'
Записан
BlackTass
Гость
« Ответ #10 : Февраль 18, 2010, 15:08 »

выложи исходники
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #11 : Февраль 18, 2010, 15:20 »

#include <QMap> в class_name.h?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
catprog
Гость
« Ответ #12 : Февраль 18, 2010, 15:32 »

Вот самый простой пример
http://rapidshare.com/files/352343524/test_proj.rar.html
Не компилится.

Цитировать
#include <QMap> в class_name.h?
Есть.
« Последнее редактирование: Февраль 18, 2010, 15:33 от catprog » Записан
BlackTass
Гость
« Ответ #13 : Февраль 19, 2010, 20:44 »

Рапида в ауте, пишет что серваки перегружены. Приаттач прямо к сообщению здесь.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Февраль 19, 2010, 21:19 »

Код:
int test_method(int index,const QMap <QString,QString>& additional_params);
Мелочь конечно, но можно подсократить текст
Код:
typedef QMap <QString,QString> QSSMap;
..
int test_method(int index,const QSSMap & additional_params);
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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