Изменить только определенный параметр по умолчанию для функции
Я использую qt
и я пытаюсь использовать QInputDialog::getText()
для получения ввода от пользователя, из Документации определение функции:
QString QInputDialog::getText(QWidget * parent, const QString & title, const QString & label, QLineEdit::EchoMode mode = QLineEdit::Normal, const QString & text = QString(), bool * ok = 0, Qt::WindowFlags flags = 0, Qt::InputMethodHints inputMethodHints = Qt::ImhNone)
и вот мой код:
bool ok=0;
newAddress = QInputDialog::getText(0,"Enter an Address to Validate",
"Adress: comma separated (e.g Address line 1, Address line 2, City, Postal Code)"
,&ok);
но я получаю ошибку:
error: no matching function for call to 'QInputDialog::getText(int, const char [29], const char [80], bool*)'
,&ok);
^
но когда я передаю все аргументы перед аргументом *ok
например:
bool ok=0;
newAddress = QInputDialog::getText(0,"Enter an Address to Validate",
"Adress: comma separated (e.g Address line 1, Address line 2, City, Postal Code)"
,QLineEdit::Normal,
QString(),&ok);
оно работает.
Я действительно не понимаю, почему я не могу просто изменить параметр по умолчанию, который я хочу, и оставить остальные по умолчанию?.
Ответы
Ответ 1
Когда вы передаете значение для определенного параметра, который имеет аргумент по умолчанию, вы должны передать значения для всех параметров по умолчанию перед ним. В противном случае переданное вами значение будет принято как значение для первого параметра по умолчанию.
Итак, вы должны сделать это:
newAddress = QInputDialog::getText(
0,
"Enter an Address to Validate",
"Adress: comma separated (e.g Address line 1, Address line 2, City, Postal Code)",
QLineEdit::Normal,
QString(),
&ok);
Вы можете не указывать значения параметров после параметра bool *
.
Стандарт C++ указывается в [dcl.fct.default]/1
Аргументы по умолчанию будут использоваться в вызовах, где завершающие аргументы отсутствуют.
Ответ 2
В C++ вы можете использовать только (один или несколько) параметров по умолчанию в конце списка параметров. Если вы опустите параметры в середине, компилятор не сможет узнать, какой аргумент принадлежит какому параметру. Поэтому вы должны указать параметры по умолчанию QLineEdit::Normal and QString()
вручную перед передачей &ok
.
В вашем не работающем случае компилятор пытается сопоставить ваш bool-указатель со следующим типом в списке параметров, который является QLineEdit::EchoMode
и поэтому не совместим.
Ответ 3
ошибка из-за необязательных параметров:
QString QInputDialog::getText(
QWidget * parent,
const QString & title,
const QString & label,
QLineEdit::EchoMode mode = QLineEdit::Normal,
const QString& text = QString(),
bool * ok = 0,
Qt::WindowFlags flags = 0,
Qt::InputMethodHints inputMethodHints = Qt::ImhNone)
QInputDialog::getText(
0,
"Enter an Address to Validate",
"Adress: comma separated (e.g Address line 1, Address line 2, City, Postal Code)",
--> QLineEdit::EchoMode ??
--> QString& text ??
&ok);
если вы установите один необязательный параметр, вы должны установить все необязательные параметры слева от него, в вашем случае QLineEdit :: EchoMode и QString & text