Вызов перегруженного 'arg(QString (&)())' неоднозначен при вызове с использованием QApplication::applicationDirPath, почему?

QString msgText = QString("The file has been saved at %1\sysconf.xml").arg(QApplication::applicationDirPath);

дает мне вышеуказанную ошибку. Раньше я использовал .arg(), поэтому мне интересно, почему он выдает эту ошибку? Все мои другие .arg() в моем коде работают правильно.


person KrauseDroid    schedule 27.03.2014    source источник
comment
Не могли бы вы предоставить полное сообщение об ошибке? Он включает в себя фактические типы вызова, а часто также доступные альтернативные функции.   -  person Some programmer dude    schedule 27.03.2014
comment
Я думаю, что на SO достаточно вопросов об опечатках. Боюсь, это никому не поможет.   -  person Kuba hasn't forgotten Monica    schedule 28.03.2014


Ответы (3)


ОБЪЯСНЕНИЕ

QApplication::applicationDirPath - это статическая функция-член, поэтому, чтобы получить искомое значение, вы должны рассматривать его как таковое; вы должны вызвать функцию.

В настоящее время вы пытаетесь передать указатель функции в QString::arg, и, поскольку компилятор не может найти подходящую перегрузку для такой конструкции, он вызывает диагностику.


РЕШЕНИЕ

QString msgText = QString(...).arg(QApplication::applicationDirPath ());

Примечание. См. добавление () после QApplication::applicationDirPath.

person Filip Roséen - refp    schedule 27.03.2014
comment
О черт, точно! Спасибо за объяснение, хотя. Теперь это работает! - person KrauseDroid; 27.03.2014
comment
Кажется, найдено более одной подходящей перегрузки, или сообщение об ошибке должно быть другим. Что заставляет меня задуматься, что это за перегрузки? - person Arne Mertz; 27.03.2014

Попробуйте вызвать функцию:

QString msgText = QString("The file has been saved at %1\sysconf.xml").arg(QApplication::applicationDirPath());

Обратите внимание на "()" после applicationDirPath.

person DrD    schedule 27.03.2014

В соответствии с этим вы передаете указатель на статическую функцию-член applicationDirPath и arg имеют несколько перегрузок, которые не принимают такой указатель. Кажется, ваш компилятор находит несколько преобразований указателя функции на типы параметров, для которых arg перегружен, и путается. Вы имели в виду это:

QString msgText = QString("The file has been saved at %1\sysconf.xml")
  .arg(QApplication::applicationDirPath());
                                 //    ^^--!!
person Arne Mertz    schedule 27.03.2014