Сообщение об ошибке:
Ошибка: нет соответствующей функции для вызова
blockquote>QObject::connect(QSpinBox*&, <unresolved overloaded function type>, QSlider*&, void (QAbstractSlider::*)(int))
Важной частью этого является упоминание " неразрешенный перегруженный тип функции ". Компилятор не знает, имеете ли вы
QSpinBox::valueChanged(int)
илиQSpinBox::valueChanged(QString)
.Существует несколько способов разрешения перегрузки:
Предоставить подходящий шаблонный параметр к
connect()
Это заставляетQObject::connect<void(QSpinBox::*)(int)>(spinBox, &QSpinBox::valueChanged, slider, &QSlider::setValue);
connect()
разрешить&QSpinBox::valueChanged
перегрузку, которая принимаетint
. Если у вас есть нерешенные перегрузки для аргумента slot, вам нужно будет предоставить второй аргумент шаблонаconnect()
. К сожалению, нет синтаксиса, чтобы попросить, чтобы первый был выведен, поэтому вам нужно будет предоставить оба. Это может помочь второй подход:Использовать временную переменную правильного типа
Назначениеvoid(QSpinBox::*signal)(int) = &QSpinBox::valueChanged; QObject::connect(spinBox, signal, slider, &QSlider::setValue);
signal
выберет желаемую перегрузку, и теперь это может быть успешно заменяется в шаблоне. Это работает одинаково с аргументом «slot», и в этом случае я считаю его менее громоздким.Использовать преобразование
Здесь мы можем избежатьstatic_cast
, так как это просто принуждение, а не устранение защиты языка. Я использую что-то вроде:Это позволяет нам писать// Also useful for making the second and // third arguments of ?: operator agree. template<typename T, typename U> T&& coerce(U&& u) { return u; }
QObject::connect(spinBox, coerce<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), slider, &QSlider::setValue);
Это могло быть полезно: http://www.cpan.org/misc/cpan-faq.html#How_mirror_CPAN
CPAN:: Мини-способ пойти. После того как Вы зеркально отразили CPAN локально, Вы захотите установить свой зеркальный URL в CPAN.pm или CPANPLUS к локальному каталогу с помощью "файла": URL как это:
file:///path/to/my/cpan/mirror
Если Вы хотели бы, чтобы Ваше зеркало имело копии версий разработки распределения CPAN, можно использовать CPAN:: Мини-:: Devel.
Обновление:
"Что я должен зеркально отразить CPAN?" FAQ, данный в другом ответе, для зеркального отражения всех CPAN, обычно для обеспечения другого общедоступного зеркала. Это включает старые, устаревшие версии дистрибутивов. CPAN:: Мини-просто зеркально отражает последние версии. Это намного меньше, и для большинства пользователей обычно, какие люди использовали бы для локального или разъединенного (ноутбук) доступ к CPAN.
Помимо других ответов, проверьте CPAN Leon:: Мини-:: Веб-сервер, который дает Вам Поисковый интерфейс CPAN Вашей локальной копии CPAN.
Если Вы хотите сделать более необычные вещи, посмотрите мой разговор "о MyCPAN". Можно ввести собственные частные модули в частный CPAN с CPAN:: Мини-:: Введите, например.
CPAN:: Мини-прекрасен. По умолчанию это сохраняет только последнюю версию распределения, не каждую версию, как CPAN делает.
Можно также установить CPAN:: Мини-:: Веб-сервер, который предоставляет Вам веб-интерфейс к Вашему локальному зеркалу cpan - очень удобный, если Вы в режиме офлайн и все еще хотите работать с жемчугом.
Randal Schwartz написал статью о зеркальном отражении CPAN, который я нашел довольно полезными: http://www.stonehenge.com/merlyn/LinuxMag/col43.html
Наиболее вероятный сценарий для выполнения зеркала CPAN - то, так, чтобы Ваша сеть 50 машин могла все быть обновлена от него локально, вместо того, чтобы поразить сеть 50 раз.
Я утверждал бы, что использование CPAN традиционным способом является плохим способом усовершенствовать сеть серверов.
Я выполняю сеть машин Redhat. Я упаковываю все модули CPAN, предназначенные для использования в производстве в RPMs (главным образом использующий cpanflute2 инструмент от об/мин:: Specfile), и развертывают их тот путь, таким образом, гарантируя надлежащее отслеживание зависимости, которое Вы действительно не получаете от самого CPAN никаким нормальным способом.