Russian Qt Forum

Программирование => С/C++ => Тема начата: catprog от Февраль 18, 2010, 12:58



Название: Конструкторы, параметры по умолчанию...
Отправлено: 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>???

Может лучше перегрузить конструктор и тело моего большого конструктора вынести в отдельный метод инит?


Название: Re: Конструкторы, параметры по умолчанию...
Отправлено: niXman от Февраль 18, 2010, 13:07
Цитировать
А как сделать что бы по умолчанию был пустой QMap<QString,QString>
Код
C++ (Qt)
func(int v, const QMap<QString,QString>& m = QMap<QString,QString>()) {
}
 


Название: Re: Конструкторы, параметры по умолчанию...
Отправлено: catprog от Февраль 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); все равно требует второй параметр у метода, почему?


Название: Re: Конструкторы, параметры по умолчанию...
Отправлено: Павел_F. от Февраль 18, 2010, 14:23
Почитайте книжку по c/с++. Страуструб вам вполне подойдет.


Название: Re: Конструкторы, параметры по умолчанию...
Отправлено: pastor от Февраль 18, 2010, 14:24
catprog, покажи объявление метода test_method


Название: Re: Конструкторы, параметры по умолчанию...
Отправлено: BlackTass от Февраль 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;
}


Название: Re: Конструкторы, параметры по умолчанию...
Отправлено: catprog от Февраль 18, 2010, 14:33
catprog, покажи объявление метода test_method
Я и показал два варианта, вон строка из интерфейса класса и само описание метода, чтоб пост не раздувать метод ничего не делает.


Название: Re: Конструкторы, параметры по умолчанию...
Отправлено: catprog от Февраль 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;
}

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


Название: Re: Конструкторы, параметры по умолчанию...
Отправлено: pastor от Февраль 18, 2010, 14:36
Так совсем не компилируется.

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


Название: Re: Конструкторы, параметры по умолчанию...
Отправлено: catprog от Февраль 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'


Название: Re: Конструкторы, параметры по умолчанию...
Отправлено: BlackTass от Февраль 18, 2010, 15:08
выложи исходники


Название: Re: Конструкторы, параметры по умолчанию...
Отправлено: pastor от Февраль 18, 2010, 15:20
#include <QMap> в class_name.h?


Название: Re: Конструкторы, параметры по умолчанию...
Отправлено: catprog от Февраль 18, 2010, 15:32
Вот самый простой пример
http://rapidshare.com/files/352343524/test_proj.rar.html
Не компилится.

Цитировать
#include <QMap> в class_name.h?
Есть.


Название: Re: Конструкторы, параметры по умолчанию...
Отправлено: BlackTass от Февраль 19, 2010, 20:44
Рапида в ауте, пишет что серваки перегружены. Приаттач прямо к сообщению здесь.


Название: Re: Конструкторы, параметры по умолчанию...
Отправлено: Igors от Февраль 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);


Название: Re: Конструкторы, параметры по умолчанию...
Отправлено: lit-uriy от Февраль 19, 2010, 21:48
catprog, между символами ">" и "&" лучше сделать пробел